QQ登录

只需一步,快速开始

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

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

[复制链接]
最佳答案
1 
累计签到:133 天
连续签到:1 天
林泽点 发表于 2018-1-13 21:38:07 From FishC Mobile | 显示全部楼层
for m in list1:
    for n in list1:
        if n <= m:
            continue
        if n%m == 0:
            list1.remove(n)
print(list1)
这是我的最终答案

评分

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

查看全部评分

最佳答案
3 
累计签到:31 天
连续签到:1 天
cnkizy 发表于 2018-1-13 22:17:00 | 显示全部楼层
  1. list = [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]
  2. for i in list:
  3.         for j in list:
  4.                 if j == i:
  5.                         continue
  6.                 if j%i==0:
  7.                         list.remove(j)
  8. for i in list:
  9.         print(i,end=' ')
复制代码

时间复杂度O(n2)
结果如有不对 恳请指正

评分

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

查看全部评分

最佳答案
40 
累计签到:10 天
连续签到:1 天
yjsx86 发表于 2018-1-13 23:33:46 | 显示全部楼层
  1. 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]

  2. def generator():
  3.     global list1
  4.     while list1:
  5.         temp = list1.pop(0)
  6.         yield temp
  7.         list1 = [x for x in list1 if x % temp != 0]

  8. g = generator()
  9. print([x for x in g])
复制代码

评分

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

查看全部评分

最佳答案
13 
累计签到:89 天
连续签到:54 天
shigure_takimi 发表于 2018-1-14 05:34:40 From FishC Mobile | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-1-14 05:57 编辑
  1. #  方法3,似乎更合乎题意。
  2. #  但又感觉本质上和方法2上一样的复杂程度。。
  3. 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]
  4. index = 0
  5. while index < len(list1)-1:
  6.         for i in list1[index+1:]:
  7.                 if i % list1[index] == 0:
  8.                         list1.remove(i)
  9.         index += 1
  10. print(list1)
复制代码
最佳答案
6 
累计签到:70 天
连续签到:2 天
ouyunfu 发表于 2018-1-14 06:25:44 | 显示全部楼层
求解
最佳答案
6 
累计签到:70 天
连续签到:2 天
ouyunfu 发表于 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)
最佳答案
0 
累计签到:3 天
连续签到:1 天
coopr 发表于 2018-1-14 19:12:01 | 显示全部楼层
  1. list1 = [3, 7, 10, 11, 12, 14,
  2. 15, 17, 18, 19, 20, 21, 22, 24,
  3. 26, 27, 28, 30, 32, 34, 35, 36,
  4. 39, 41, 42, 43, 45, 48, 49, 53,
  5. 64, 74, 78, 80, 88, 90, 91, 95,
  6. 96, 103, 107, 116, 142, 148, 152,
  7. 153, 158, 163, 171, 173, 174, 175,
  8. 176, 179, 181, 188, 190, 201, 204, 207,
  9. 216, 218, 222, 231, 235, 239, 248, 250,
  10. 251, 253, 258, 262, 265, 278, 292, 295,
  11. 296, 301, 305, 313, 317, 320, 326, 332,
  12. 334, 347, 355, 357, 358, 363, 365, 366,
  13. 368, 375, 377, 381, 391, 414, 417, 426,
  14. 428, 437, 438, 445, 453, 459, 466, 474,
  15. 476, 477, 489, 494]

  16. list2 = []
  17. n = len(list1)
  18. for i in range(0,n):
  19.         for each in list1:
  20.                 if each != list1[i]:
  21.                         yushu = list1[i]%each
  22.                         if yushu == 0 and list1 not in list2:
  23.                                 list2.append(list1[i])
  24. for each in list2:
  25.         if each in list1:
  26.                 list1.remove(each)
  27. print(list1)
复制代码

评分

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

查看全部评分

最佳答案
0 

尚未签到

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

复制代码

评分

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

查看全部评分

最佳答案
2 

尚未签到

wojiaodabai 发表于 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

查看全部评分

最佳答案
13 
累计签到:89 天
连续签到:54 天
shigure_takimi 发表于 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 ...

大神写的两个方法都看不懂。
最佳答案
64 
累计签到:380 天
连续签到:2 天
jerryxjr1220 发表于 2018-1-16 11:18:53 | 显示全部楼层
shigure_takimi 发表于 2018-1-15 18:20
大神写的两个方法都看不懂。

方法一其实就是利用集合相减再求交集,用了reduce函数合并成一行输出。
方法二就是用的标记法,和标记法求质数的原理一样,优势是效率非常高,你可以进行测试。
最佳答案
1 
累计签到:60 天
连续签到:1 天
Elastcio 发表于 2018-1-16 13:24:24 | 显示全部楼层
  1. 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]
  2. for each in list1:
  3.     for i in range(list1.index(each)):
  4.         if each % list1[i] == 0 and each != list1[i]:            
  5.             list1.remove(each)
  6.             print("remove %d"%each)
  7.             break

  8. print("list1=",list1)
复制代码
最佳答案
0 

尚未签到

成才 发表于 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,  ...

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

  9. list2 = list1
  10. for i in list1:
  11.     j = 2
  12.     while j < len(list1):
  13.         c = j * i
  14.         if c in list2:
  15.             list2.remove(c)
  16.         j += 1

  17. print(list2)

复制代码
最佳答案
3 

尚未签到

鱼油127327 发表于 2018-1-31 13:17:42 | 显示全部楼层
  1. 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]
  2. def fliter(a_list):
  3.     '''传入一个列表,用两重循环过滤掉不要的数据'''
  4.     for each in list1:
  5.         for one in list1:
  6.             if one!=each and one % each == 0:
  7.                 list1.remove(one)
  8.     return list1
  9.     #调用两次fliter()函数确保没有漏网之大甲鱼(๑◔◦◔๑)
  10. list1=fliter(list1)
  11. print(fliter(list1))
复制代码

应该是最容易实现的算法吧&#128514;新手写的不好大神轻喷
最佳答案
0 
累计签到:2 天
连续签到:1 天
ciager 发表于 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)
最佳答案
0 
累计签到:70 天
连续签到:14 天
dunhee 发表于 2018-2-8 16:09:17 | 显示全部楼层
  1. def f(L):
  2.     for i in range(len(L)-1):
  3.         if L[i] == -1: continue
  4.         for j in range(i+1, len(L)):
  5.             if L[j] % L[i] == 0:
  6.                 L[j] = -1
  7.     return [x for x in L if x != -1]
  8.                     

  9. 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]

  10. print(f(L))
复制代码
最佳答案
0 
累计签到:37 天
连续签到:1 天
renze 发表于 2018-3-6 16:09:29 | 显示全部楼层
  1. 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]
  2. length = len(list1)-1

  3. for i in range(length):
  4.     for j in range(length-i):
  5.         if list1[i] == 0 :
  6.             continue
  7.         if list1[i+j+1] % list1[i] == 0 :
  8.             list1[i+j+1] = 0
  9. list2 = []

  10. for i in range(len(list1)):
  11.     if list1[i] != 0 :
  12.         list2.append(list1[i])
  13. print(list2)
复制代码
最佳答案
1 
累计签到:40 天
连续签到:3 天
凌九霄 发表于 2018-3-30 22:54:28 | 显示全部楼层
  1. import random

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


  5. def reducenum(n):
  6.     result = []
  7.     while n not in [1]:  # 循环保证递归
  8.         for index in range(2, n + 1):
  9.             if n % index == 0:
  10.                 n //= index  # n 等于 n/index
  11.                 if n == 1:
  12.                     result.append(index)
  13.                 else:  # index 一定是素数
  14.                     result.append(index)
  15.                 break
  16.     return result


  17. for i in sorted(test, reverse=True):
  18.     zys = reducenum(i)
  19.     for j in zys:
  20.         if j != 1 and j != i:
  21.             if j in test:
  22.                 test.remove(i)
  23.                 break
  24. print('\n处理后的数组:')
  25. print(test)
复制代码

360截图20180330225330322.jpg
12
返回列表
12

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-4-22 18:41

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