操作列表 - 将整数提取到新列表

时间:2017-06-30 15:03:09

标签: python integer

我有一个由字符串和整数组成的列表。我必须只弹出整数并将其放在一个单独的列表中。 我的代码

list1=['a','b','c','d','e','f','g','h',1,2,3]
list=[]
x=0
for i in list1:
     if isinstance(i,int) :
        list.append(i)
        list1.pop(x)
     x += 1

print(list1)
print(list)

输出上述代码

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 2]
[1, 3]

我的问题是:为什么我的代码没有删除所有整数?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:7)

迭代同时操作同一个列表:

for i in list1:            # iteration
    if isinstance(i,int):
        list.append(i)
        list1.pop(x)       # manipulate
     x += 1

这通常不起作用:for循环适用于游标。如果你同时删除一个项目,那么你将开始跳过元素。

最好简单地使用声明性 Pythonic 方法,例如以下内容:

list_int = [i for i in list1 if isinstance(i,int)]
list1 = [i for i in list1 if not isinstance(i,int)]

此外,您不应将变量命名为list,因为之后您删除了对list类的引用。