同时从两个列表中弹出值

时间:2015-10-16 20:55:45

标签: python list pop

这里发生了一些奇怪的事情(至少对我来说很奇怪)。我正试图弹出“南茜”。一个列表中的值和另一个列表中的相应值。我被告知您无法从列举的列表中弹出,因此我制作了一个临时列表。

MATCH

有些事情正在发生,我不明白:

1)它似乎是从atemp和a弹出nans,尽管我只告诉它a.pop(i)而不是atemp.pop(i)。是否有某种功能超载或等同于ate和atemp的东西,我不明白?如何将它们完全分开(即仅从a而不是atemp?

弹出

2)它并没有弹出所有的nan并且for循环必须重复多次才能弹出所有的nan

3 个答案:

答案 0 :(得分:2)

有许多更简单的方法,但如果您想使用自己的代码,则需要复制 a,而不仅仅是创建引用并使用不同的逻辑要从列表中删除元素,在反向范围内循环len a -1将为您提供所需的输出:

import numpy as np

a = []
b = []

for i in range(0, 100):  # alternating list of ints and nan
    if i % 2 == 0:
        a.append(i)
    else:
        a.append(np.nan)  #the only way I know how to make nan
    b.append(i * 100)

atemp = a[:]
print(len(a), len(atemp))

for i in range(len(a)-1,-1,-1):
    if np.isnan(a[i]):
        a.pop(i)
        b.pop(i)
print(len(a), len(atemp))

答案 1 :(得分:1)

这个怎么样?

contentPane

答案 2 :(得分:1)

这样做了:

a, b = zip(*[(x,y) for x,y in zip(a, b) if np.isfinite(y)])

谢谢大家。对不起反叛的答案被否决了,因为它帮助了我很多。