鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 139

[复制链接]
发表于 2018-1-14 05:34:40 From FishC Mobile | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-14 05:57 编辑
#  方法3,似乎更合乎题意。
#  但又感觉本质上和方法2上一样的复杂程度。。
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
index = 0
while index < len(list1)-1:
        for i in list1[index+1:]:
                if i % list1[index] == 0:
                        list1.remove(i)
        index += 1
print(list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 06:25:44 | 显示全部楼层
求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-14 06:55:41 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
list2 = []
list3 = []
for i in list1:
    for j in list1:
        if i > j and i%j == 0:
            list2.extend([i,j])

            for item in list2:
                if not item in list3:
                    list3.append(item)
result = []
for x in list1:
    if not x in list3:
        result.append(x)
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 19:12:01 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 
15, 17, 18, 19, 20, 21, 22, 24, 
26, 27, 28, 30, 32, 34, 35, 36, 
39, 41, 42, 43, 45, 48, 49, 53,
64, 74, 78, 80, 88, 90, 91, 95, 
96, 103, 107, 116, 142, 148, 152,
153, 158, 163, 171, 173, 174, 175,
176, 179, 181, 188, 190, 201, 204, 207, 
216, 218, 222, 231, 235, 239, 248, 250, 
251, 253, 258, 262, 265, 278, 292, 295, 
296, 301, 305, 313, 317, 320, 326, 332,
334, 347, 355, 357, 358, 363, 365, 366, 
368, 375, 377, 381, 391, 414, 417, 426,
428, 437, 438, 445, 453, 459, 466, 474, 
476, 477, 489, 494]

list2 = []
n = len(list1)
for i in range(0,n):
        for each in list1:
                if each != list1[i]:
                        yushu = list1[i]%each
                        if yushu == 0 and list1 not in list2:
                                list2.append(list1[i])
for each in list2:
        if each in list1:
                list1.remove(each)
print(list1)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 14:01:32 | 显示全部楼层
list1=[3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30,
       32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88,
       90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171,
       173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218,
       222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292,
       295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357,
       358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426
       , 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
list2= list1.copy()
list3=[]
for i in list1:
    for j in list2:
        if i>j:
            if i%j==0:
                if i in list2:
                    list2.remove(i)
        if i<j:
            if j%i==0:
                
                list2.remove(j)
print(list2)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 15:29:19 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]        

new1=[]  
new2=[]
new3=[]
for i in list1:
    for j in list1:
        if i==j:
            new1.append(i)
        elif i%j ==0:
            new2.append(i)
for i in list1:
    if i not in new2:
        new3.append(i)
print(new3)
[3, 7, 10, 11, 17, 19, 26, 32, 41, 43, 53, 74, 103, 107, 116, 142, 158, 163, 173, 179, 181, 188, 218, 235, 239, 248, 251, 262, 278, 292, 295, 305, 313, 317, 332, 334, 347, 355, 365, 368, 377, 445, 466]
做的有点麻烦,想看看大神们有没有简单的方法啊!

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-15 18:20:00 | 显示全部楼层
jerryxjr1220 发表于 2018-1-12 15:52
[3, 7, 10, 11, 17, 19, 26, 32, 41, 43, 53, 74, 103, 107, 116, 142, 158, 163, 173, 179, 181, 188, 2 ...

大神写的两个方法都看不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 11:18:53 | 显示全部楼层
shigure_takimi 发表于 2018-1-15 18:20
大神写的两个方法都看不懂。

方法一其实就是利用集合相减再求交集,用了reduce函数合并成一行输出。
方法二就是用的标记法,和标记法求质数的原理一样,优势是效率非常高,你可以进行测试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 13:24:24 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
for each in list1:
    for i in range(list1.index(each)):
        if each % list1[i] == 0 and each != list1[i]:            
            list1.remove(each)
            print("remove %d"%each)
            break

print("list1=",list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 13:50:35 | 显示全部楼层
编程新血 发表于 2018-1-12 20:19
'''一个2重循环'''

list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30,  ...

哇 ,这个思路有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 15:26:58 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26,
27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74,
 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158,
 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216,
  218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292,
   295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358,
   363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438,
   445, 453, 459, 466, 474, 476, 477, 489, 494]

list2 = list1
for i in list1:
    j = 2
    while j < len(list1):
        c = j * i
        if c in list2:
            list2.remove(c)
        j += 1

print(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 13:17:42 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
def fliter(a_list):
    '''传入一个列表,用两重循环过滤掉不要的数据'''
    for each in list1:
        for one in list1:
            if one!=each and one % each == 0:
                list1.remove(one)
    return list1
    #调用两次fliter()函数确保没有漏网之大甲鱼(๑◔◦◔๑)
list1=fliter(list1)
print(fliter(list1))
应该是最容易实现的算法吧&#128514;新手写的不好大神轻喷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 13:56:12 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
for i in list1:
    for j in list1:
        if j % i == 0 and i != j:
            list1.remove(j)
print(list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 16:09:17 | 显示全部楼层
def f(L):
    for i in range(len(L)-1):
        if L[i] == -1: continue
        for j in range(i+1, len(L)):
            if L[j] % L[i] == 0:
                L[j] = -1
    return [x for x in L if x != -1]
                    

L = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]

print(f(L))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 16:09:29 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
length = len(list1)-1

for i in range(length):
    for j in range(length-i):
        if list1[i] == 0 :
            continue
        if list1[i+j+1] % list1[i] == 0 :
            list1[i+j+1] = 0
list2 = []

for i in range(len(list1)):
    if list1[i] != 0 :
        list2.append(list1[i])
print(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 22:54:28 | 显示全部楼层
import random

test = random.sample([x for x in range(1, 31)], 30)
print("\n待处理的随机数组:")
print(test)


def reducenum(n):
    result = []
    while n not in [1]:  # 循环保证递归
        for index in range(2, n + 1):
            if n % index == 0:
                n //= index  # n 等于 n/index
                if n == 1:
                    result.append(index)
                else:  # index 一定是素数
                    result.append(index)
                break
    return result


for i in sorted(test, reverse=True):
    zys = reducenum(i)
    for j in zys:
        if j != 1 and j != i:
            if j in test:
                test.remove(i)
                break
print('\n处理后的数组:')
print(test)
360截图20180330225330322.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-11 14:38:51 | 显示全部楼层
list2 = []
for each in list1:
    n = list1.index(each)
    for i in range(n):
        if not each % list1[i]:
            list2.append(each)
            break
        else:
            continue
for each in list2:
    list1.remove(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-26 12:45:41 | 显示全部楼层
def fun139(list1):
    list2 = []
    for i in list1:
        for j in list1:
            if not i%j and i != j:
                list2.append(i)
                break
                
    return sorted(list(set(list1) - set(list2)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-8 23:12:02 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
for each in list1[:]:
    for num in range(list1.index (each)):
        if each % list1[num] ==0:
            list1.remove(each)
            break
print (list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-3 20:48:00 | 显示全部楼层
list1 = [3, 7, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 24, 26, 27, 28, 30, 32, 34, 35, 36, 39, 41, 42, 43, 45, 48, 49, 53, 64, 74, 78, 80, 88, 90, 91, 95, 96, 103, 107, 116, 142, 148, 152, 153, 158, 163, 171, 173, 174, 175, 176, 179, 181, 188, 190, 201, 204, 207, 216, 218, 222, 231, 235, 239, 248, 250, 251, 253, 258, 262, 265, 278, 292, 295, 296, 301, 305, 313, 317, 320, 326, 332, 334, 347, 355, 357, 358, 363, 365, 366, 368, 375, 377, 381, 391, 414, 417, 426, 428, 437, 438, 445, 453, 459, 466, 474, 476, 477, 489, 494]
for i in list1:
    for j in range(2,167):
        m = i * j
        if m in list1:
           list1.remove(m)                
print(list1)
print(len(list1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表