本人 python 菜鸟一枚,今天遇到了下面的问题。
for name in name_list:
if len(name_list) != 0:
name_list.pop(0)
print(name_list)
运行结果
/Users/xxx/PycharmProjects/work/work/test/test-1.py
['b', 'c', 'd']
['c', 'd']
Process finished with exit code 0
我断点 debug 后发现 for 循环第二次循环时 name 的值直接从 a 变为 c,跳过了 b,求各位讲下原因,还有就是如果想把一个列表重的元素通过循环删空该怎么写?
1
xpresslink 2018-12-29 15:57:26 +08:00 1
不能一迭代一删除列表,索引会变。
楼主既然用 python 就要用 python 的思维方式,不能还停留在 C 语言的模式。 list(set(name_list))就去重了。 >>> l = [2, 1, 2, 3] >>> from collections import OrderedDict >>> list(OrderedDict.fromkeys(l, None).keys()) [2, 1, 3] >>> |
2
pompeii 2018-12-29 15:59:54 +08:00 via iPhone 1
不要同时迭代和修改同一个列表。while(len(name_list)!=0)或者 while name_list,再 pop;直接 name_list=[]也达到效果了
|
3
ballshapesdsd 2018-12-29 16:01:00 +08:00 1
这个 name 是要做啥子呢,都没用到
|
4
jianzhao123 OP @pompeii 我已经改成 while 了,谢谢
|
5
jianzhao123 OP @ballshapesdsd 本来是做个例子,后来为了方便就改了😂😂
|
6
ClutchBear 2018-12-29 17:16:27 +08:00
不能在便利 list 的时候,
修改 list |
7
jianzhao123 OP @ClutchBear 感谢。
|