shigure_takimi 发表于 2018-1-14 05:34:40

本帖最后由 shigure_takimi 于 2018-1-14 05:57 编辑

#方法3,似乎更合乎题意。
#但又感觉本质上和方法2上一样的复杂程度。。
list1 =
index = 0
while index < len(list1)-1:
        for i in list1:
                if i % list1 == 0:
                        list1.remove(i)
        index += 1
print(list1)

ouyunfu 发表于 2018-1-14 06:25:44

求解

ouyunfu 发表于 2018-1-14 06:55:41

list1 =
list2 = []
list3 = []
for i in list1:
    for j in list1:
      if i > j and i%j == 0:
            list2.extend()

            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)

coopr 发表于 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:
                        yushu = list1%each
                        if yushu == 0 and list1 not in list2:
                                list2.append(list1)
for each in list2:
        if each in list1:
                list1.remove(each)
print(list1)

lihw 发表于 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)

wojiaodabai 发表于 2018-1-15 15:29:19

list1 =       

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)

做的有点麻烦,想看看大神们有没有简单的方法啊!

shigure_takimi 发表于 2018-1-15 18:20:00

jerryxjr1220 发表于 2018-1-12 15:52


大神写的两个方法都看不懂。

jerryxjr1220 发表于 2018-1-16 11:18:53

shigure_takimi 发表于 2018-1-15 18:20
大神写的两个方法都看不懂。

方法一其实就是利用集合相减再求交集,用了reduce函数合并成一行输出。
方法二就是用的标记法,和标记法求质数的原理一样,优势是效率非常高,你可以进行测试。

Elastcio 发表于 2018-1-16 13:24:24

list1 =
for each in list1:
    for i in range(list1.index(each)):
      if each % list1 == 0 and each != list1:            
            list1.remove(each)
            print("remove %d"%each)
            break

print("list1=",list1)

成才 发表于 2018-1-17 13:50:35

编程新血 发表于 2018-1-12 20:19
'''一个2重循环'''

list1 =

哇 ,这个思路有意思

sunnychou 发表于 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)

鱼油127327 发表于 2018-1-31 13:17:42

list1 =
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;新手写的不好大神轻喷

ciager 发表于 2018-1-31 13:56:12

list1 =
for i in list1:
    for j in list1:
      if j % i == 0 and i != j:
            list1.remove(j)
print(list1)

dunhee 发表于 2018-2-8 16:09:17

def f(L):
    for i in range(len(L)-1):
      if L == -1: continue
      for j in range(i+1, len(L)):
            if L % L == 0:
                L = -1
    return
                  

L =

print(f(L))

renze 发表于 2018-3-6 16:09:29

list1 =
length = len(list1)-1

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

for i in range(len(list1)):
    if list1 != 0 :
      list2.append(list1)
print(list2)

凌九霄 发表于 2018-3-30 22:54:28

import random

test = random.sample(, 30)
print("\n待处理的随机数组:")
print(test)


def reducenum(n):
    result = []
    while n not in :# 循环保证递归
      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)

Wangzy1025 发表于 2018-5-11 14:38:51

list2 = []
for each in list1:
    n = list1.index(each)
    for i in range(n):
      if not each % list1:
            list2.append(each)
            break
      else:
            continue
for each in list2:
    list1.remove(each)

咕咕鸡鸽鸽 发表于 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)))

hj5818 发表于 2019-4-8 23:12:02

list1 =
for each in list1[:]:
    for num in range(list1.index (each)):
      if each % list1 ==0:
            list1.remove(each)
            break
print (list1)

verauxu 发表于 2020-1-3 20:48:00

list1 =
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))
页: 1 [2] 3
查看完整版本: Python:每日一题 139