0
list_d = ["a","b","c",3,5,4,"d","e","f",1,"ee"]
list_e = []

print("Before: %s"%(list_d))
print("Before: %s"%(list_e))

for item in list_d:
    if isinstance(item,int):
        list_d.pop(item)
        list_e.append(item)

print("After: %s"%(list_d))
print("After: %s"%(list_e))

我有这个代码。我想将 list_d 中的这些数字转移到 list_e,但结果是:

Before: ['a', 'b', 'c', 3, 5, 4, 'd', 'e', 'f', 1, 'ee']
Before: []
After: ['a', 'c', 5, 'd', 'e', 'f', 1, 'ee']
After: [3, 4, 1]

不知何故 5 和 1 没有弹出,并且 1 附加到 list_e 但 5 没有。我的代码有什么问题?

4

1 回答 1

5

您在迭代列表时正在修改列表。您可以只使用列表理解来制作两个列表,但我会首先研究为什么您有一个多类型列表

non_ints = [not isinstance(a, int) for a in list_d]
ints = [isinstance(a, int) for a in list_d]

或作为单一的交互版本

non_ints = []
ints = []

for a in list_d:
    if isinstance(a, int):
         ints.append(a)
    else:
         non_ints.append(a)
于 2017-10-24T06:48:10.517 回答