Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 不';t pop()如果一个数字跟在一个数字后面_Python - Fatal编程技术网

Python 不';t pop()如果一个数字跟在一个数字后面

Python 不';t pop()如果一个数字跟在一个数字后面,python,Python,该代码应清除列表中的“包”。但如果数字跟在数字后面,它就不能正常工作。例如7之后的8 bag = ['apples', 1,'bananas', 'potatoes', 'tomatoes',2, 'chary',3, 'mo4ka', 7,8, 'candies', 'Main_TX'] list_n = [] x = 0 for i in bag: if isinstance(i, int): list_n.append(i) bag.pop(x)

该代码应清除列表中的“包”。但如果数字跟在数字后面,它就不能正常工作。例如7之后的8

bag = ['apples', 1,'bananas', 'potatoes', 'tomatoes',2, 'chary',3, 'mo4ka', 7,8, 'candies', 'Main_TX']
list_n = []
x = 0
for i in bag:
    if isinstance(i, int):
        list_n.append(i)
        bag.pop(x)
    x+=1

print(list_n)
print(bag)
结果:

[1, 2, 3, 7]
['apples', 'bananas', 'potatoes', 'tomatoes', 'chary', 'mo4ka', 8, 'candies', 'Main_TX']

在迭代列表时不要试图修改它

list_n = []
new_bag = []
for x in bag:
    # which_list = list_n if isinstance(x, int) else new_bag
    # which_list.append(x)
    if isinstance(x, int):
        list_n.append(x)
    else:
        new_bag.append(x)
bag = new_bag
你是。这将导致意外行为

相反,您可以使用列表理解:

list_n = [e for e in bag if isinstance(e, int)]
bag = [e for e in bag if not isinstance(e, int)]
代码不起作用的具体原因是,每次使用
bag.pop(x)
删除元素时,列表中的以下项目都会被移回一个索引。但是,
用于..的迭代器。。在
中,循环无法知道这个移位,因此当它调用其
next()
函数时,它实际上会跳过一个元素


如果直接在循环头之后添加一个
print(i)
,您将看到每次从列表中弹出一个数字时,
中的以下列表条目都会被跳过。。在
循环中(无论它是否为数字)。如果它不是一个数字,你就不会注意到它,因为字符串无论如何都应该留在列表中。

列表理解比
map
更快,因为
map
通常需要一个用户定义的函数来包装应用于每个项目的操作。如果只是筛选列表,则必须在列表上迭代两次(或更多)将比为循环编写单个
要慢。@chepner这肯定是正确的,如果性能是一个问题,我自己也会选择单循环选项。然而,只要列表不是太大或者性能不是问题,速度上的差异就不会真正影响整个运行时。“意外行为”正是让我这么做的原因。它期待着我。而且一直都很好,除非数字是数字。这有点奇怪。@zero我已经补充了一些关于“意外行为”的解释,以及它实际上从来都不起作用的事实,但你只是没有注意到它,因为它似乎起作用了。谢谢你的回复。我也在用同样的方法来克服这个障碍:而且效果很好。但这种最初鳕鱼的行为对我来说很奇怪,看起来像一只虫子袋子里的苹果,香蕉,土豆,西红柿,香蕉,土豆,西红柿,2,查理,3,mo4ka,7,8,糖果,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食,主食`