gpt4 book ai didi

python - 有条件地从两个列表中选择元素的好方法?

转载 作者:太空狗 更新时间:2023-10-30 02:04:22 26 4
gpt4 key购买 nike

我有两个列表:

a = [-1, 2, 3]
b = ['a', 'b', 'c']

ab 中的元素个数总是相同的。

我想保留a中所有为正的元素,以及b中相应的元素。

一个简单的方法是

anew = []
bnew = []
for i in xrange(len(a)):
if a[i] > 0:
anew.append(a[i])
bnew.append(b[i])

或者类似的东西

tmp = zip(*[(a[i], b[i]) for i in xrange(len(a)) if a[i]>0])
a = tmp[0] # The original a and b need not to be kept.
b = tmp[1]

我想知道是否有更短更简洁(没有任何临时变量)的方法来做到这一点。某种就地删除会很完美,但是如果我在循环中使用del a[i], b[i],删除后索引会出错一个元素。

编辑:如果选择涉及两个列表,例如条件变为

如果 a[i] > 0 且 b[i] > 0?

也许在这种情况下必须使用临时变量?

最佳答案

如果你使用numpy,有一个非常简洁的方法:

In [117]: a = np.array([-1, 2, 3])
...: b = np.array(['a', 'b', 'c'])

In [119]: a[a>0]
Out[119]: array([2, 3])

In [120]: b[a>0]
Out[120]:
array(['b', 'c'],
dtype='|S1')

如果没有numpy,你可以使用带有条件语句的列表理解:

In [121]: a = [-1, 2, 3]
...: b = ['a', 'b', 'c']

In [122]: print [i for i in a if i>0]
[2, 3]

In [124]: print [v for i, v in enumerate(b) if a[i]>0]
['b', 'c']

关于python - 有条件地从两个列表中选择元素的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com