我有两个清单:
a = [-1, 2, 3]
b = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
元素的数量a
和b
总是相同的.
我希望保持所有元素a
都是正面的,以及相应的元素b
.
一种直截了当的方式
anew = []
bnew = []
for i in xrange(len(a)):
if a[i] > 0:
anew.append(a[i])
bnew.append(b[i])
Run Code Online (Sandbox Code Playgroud)
或类似的东西
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]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更短更清洁(没有任何临时变量)的方法.某种就地删除是完美的,但如果我del a[i], b[i]
在循环中使用,删除一个元素后索引将是错误的.
编辑:如果选择涉及两个列表,例如条件变为什么,该怎么办?
if a[i] > 0 and 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')
Run Code Online (Sandbox Code Playgroud)
如果没有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']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1662 次 |
最近记录: |