python - Python 中 for 循环和打印列表的顺序是什么?

标签 python for-loop

我在下面有这个代码。第一条打印语句打印出:

['c','a','t','d','o','g','r','a','b','b','i','t']

正如预期

wlist = ['cat','dog','rabbit']
llist = [letter for word in wlist for letter in word]
tlist = []
print (llist)
for item in llist:
    if not item in tlist:
            tlist.append(item)
    else:
            llist.remove(item)
print (llist)

第二个,我希望它打印:

['c','a','t','d','o','g','r','b','i']

但它实际上打印:

['c','d','o','g','r','a','b','b','i','t']

我不明白为什么。我试图从 llist 中取出每个重复出现的字母。但第一个出现的地方似乎被去掉了,而两个 b 仍然保留着。谁能向我解释这是怎么发生的?

最佳答案

else:
    llist.remove(item)

在这里,您将从正在迭代的列表中删除项目。这通常会导致很多问题,因为你让循环跳过元素。您应该始终避免改变正在迭代的列表。

如果完全删除 else 情况,您将获得所需的结果。毕竟,不需要修改源列表。

关于python - Python 中 for 循环和打印列表的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971521/

相关文章:

windows - 批处理 : Search for string to skip lines above and write results to new file

python - 我将如何在 Coding Ground 上安装 numpy 库?

python - 如果条件输出改变,用@tf.function 装饰

python - 获取具有两个特定关键字的行

python - Python 与 C 中每行的多个属性

java - ArrayList循环只输出最后一项

python - 使用 ax.axis ('equal' 时如何获得实际轴限制)?

C-for循环奇怪

java - 在java中将对象数组从一个方法传递到另一个方法

python - 通过两个不同长度的数组和索引操作运行 for 循环