我有两个价值观列表:

f=[1,1,1,2,2,2,3,3,3]
x=[10,20,30,40,50,60,70,80,90]

现在我要从x中提取所有项,f中的相应项满足条件
abs(i)=1
所以我想以:
1 10
1 20
1 30

到目前为止,我的做法是:
for i in f:
    if abs(i)==1:
        for j in x:
            print i,j

但这给了我每1英寸f的x的所有项:
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 90
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 90
1 10
1 20
1 30
1 40
1 50
1 60
1 70
1 80
1 90

有人知道我还需要做哪些条件吗?

最佳答案

使用zip

>>> [(a, b) for a, b in zip(f, x) if abs(a)==1]
[(1, 10), (1, 20), (1, 30)]

zip从传递给它的所有iterable中返回来自相同索引的项。
>>> for a, b in zip(f, x):
...     if abs(a) == 1:
...         print a, b
...
1 10
1 20
1 30

或者如果您只想要x中的项目,那么itertools.compress可能会有帮助:
>>> from itertools import compress
>>> list(compress(x, (abs(i)==1 for i in f)))
[10, 20, 30]

10-07 15:53
查看更多