【发布时间】:2016-10-05 21:01:59
【问题描述】:
不明白为什么它在循环中缺少一些索引? 例如索引号 3。 我只是想以这种方式删除独特的元素。我知道另一个,但我不知道这个(或我)有什么问题。
lst = [2, 7, 1, 9, 3, 5, 2, 1]
def check(lst):
result = lst
print(lst) #checking
for num in lst:
print("index:", num) #checking
print("num:", num) #checking
if lst.count(num) < 2:
print("count:", lst.count(num)) #checking
result.remove(num)
return(result)
print(check(lst))
输出
[2, 7, 1, 9, 3, 5, 2, 1]
index: 2
num: 2
index: 7
num: 7
count: 1
index: 9
num: 9
count: 1
index: 5
num: 5
count: 1
index: 1
num: 1
[2, 1, 3, 2, 1]
【问题讨论】:
-
在迭代列表时不要改变它!!!!
-
我想你可能正在寻找
enumerate()。此外,在迭代列表时不要改变列表。它会导致坏事、坏事...... -
在迭代列表时,您正在从列表中删除元素。我不是 100% 确定,但我相信它会在删除过程中保持索引不变,这意味着如果索引指向第 4 号元素,而您删除第 4 号元素,则右侧的所有元素都会向左移动一个,然后索引递增,从而跳过一个元素。更好的方法是保留要删除的项目列表,然后在此循环后将其删除。
-
谢谢大家!我忘了结果只是 lst 的镜像(不是副本)。
标签: python python-3.x loops for-loop output