Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么'prev=poss[0]`和'prev=0'的行为不同?_Python - Fatal编程技术网

Python 为什么'prev=poss[0]`和'prev=0'的行为不同?

Python 为什么'prev=poss[0]`和'prev=0'的行为不同?,python,Python,我对该代码有一个问题: 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

我对该代码有一个问题:

    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]


它不会正确地删除它们。就我的一生而言,我不明白为什么。

为什么不把poss变成一个可以删除重复项的文件呢?例如

poss = set(poss)

为了回答您原来的问题,
prev=poss[0]
prev=0
不同,因为
poss[0]
不是0。

为什么不将poss变成一个来删除重复项呢?例如

poss = set(poss)

为了回答您最初的问题,
prev=poss[0]
prev=0
不同,因为
poss[0]
不是0。

我很确定您的第二个循环不会删除重复项。我真的不确定它会做什么,因为您正在修改要迭代的列表,并且每次删除时都会跳过值。我建议使用以下任何一种:

# 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
循环来删除重复项。如果不需要排序的结果,可以删除排序的
部分。

我很确定第二个循环不会删除重复项。我真的不确定它会做什么,因为您正在修改要迭代的列表,并且每次删除时都会跳过值。我建议使用以下任何一种:

# 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
循环来删除重复项。如果不需要按排序的顺序删除结果,则可以删除已排序的
部分。

也可以使用删除重复项():

但是您需要再次对列表进行排序(因此,在删除重复项后,只对其进行一次排序)

poss[0]
在您的示例中是6,因此
prev=0
不同于
prev=poss[0]
您还可以使用删除重复项():

但是您需要再次对列表进行排序(因此,在删除重复项后,只对其进行一次排序)


poss[0]
在您的示例中是6,因此
prev=0
不同于
prev=poss[0]
要回答您的问题,如果
prev=0
,则第二个for循环中的条件
prev==p
永远不会满足。我同意其他人建议使用
set()

来回答您的问题,如果
prev=0
,则第二个for循环中的条件
prev==p
永远不会满足。我同意其他人建议使用
set()

这段代码的目的是什么?不要改变你正在循环的列表。这肯定会导致混乱。你想用这段代码实现什么?不要改变你正在循环的列表。这肯定会导致混淆。在Python2.x中,字典理解不可用,这似乎是他正在使用的。在Python2.x中,字典理解不可用,这似乎是他正在使用的。
poss = list({}.fromkeys(poss).keys())