我有两个价值观列表:
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]