我有两个列表:有条件地从两个列表中选择元素的简便方法?
a = [-1, 2, 3]
b = ['a', 'b', 'c']
元素的数量在a
和b
都是一样的。
我想保留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]
,删除一个元素后索引将会出错。
编辑:如果有什么选择包括两个列表,例如,如果条件变为
if a[i] > 0 and b[i] > 0
?
也许在这种情况下,必须使用一个临时变量?
',但如果我用一个德尔[I],B [i]于一个回路,该指数将是一个element.'这是什么意思的删除后错了,你是不是也保持每个数的指数? –
我的意思是,如果我使用C风格的循环,如:for xrange(len(a))中的i:如果a [i] <0:del a [i],b [i],则它不起作用。 – FJDU
如果ai> = 0]'anew = [[ai,b [a.index(ai)]]如何? –