我对此代码有疑问:
poss = [6,9,20]
for n in range(6,66):
if(n%6) == 0 or (n%9) == 0 or (n%20) == 0:
poss.append(n)
poss.sort()
count = 0
prev = poss[0]
for p in poss:
print p
if prev == p:
del poss[count]
count += 1
prev = p
print poss
第二个for循环旨在消除poss列表中的重复项,此代码正常工作。但是,如果我更改了行:
prev = poss[0]
到
prev = 0
它不会正确删除它们。对于我的生活,我无法弄清楚为什么。
答案 0 :(得分:4)
我很确定你的第二个循环不会删除重复项。我真的不确定它会做什么,因为你正在修改你正在迭代的列表并在每次删除时跳过值。我建议使用以下任何一种方法:
# this is the same list w/o duplicates, this can replace the entire snippet
poss = [ n for n in range(6, 66) if (n % 6) == 0 or (n % 9) == 0 or (n % 20) == 0 ]
# transform your input list into a set to remove dups
poss = list(sorted(set(poss))
无需for
循环删除重复项。如果您不需要按排序顺序排列结果,则可以删除sorted
部分。
答案 1 :(得分:3)
答案 2 :(得分:0)
要回答您的问题,如果prev == p
,则永远不会遇到第二个for循环中的条件prev = 0
。我同意其他建议使用set()
的人。
答案 3 :(得分:-2)
您还可以使用dictionnary删除重复项(More info):
poss = list({p:None for p in poss}.keys()) # for python 3.x
或
poss = list({}.fromkeys(poss).keys())
但是您需要再次对列表进行排序(因此,在删除重复项后,只需对其进行一次排序)。
您的示例中 poss[0]
为6,因此prev = 0
与prev = poss[0]
不同。