我在python中有两个列表:
l = [1,1,1,1,1,1]
b = ['-', 2, 2, 2, '-', 2]
最后,我希望有一个这样的列表:
结果= [1,1,2,1,2,1,2,1,1,2]
算法: 如果b中有' - ',则不执行任何操作,否则在l中相同索引处的元素之后追加b中的元素(b中的第二个应该在l中的第二个之后)。我怎么能这样做?
for idx, i2 in enumerate(b):
if i2 != '-' and count == 1:
l.insert(prev+2,i2)
prev = prev+2
print "in if1"
print l
print prev
elif i2 != '-' and count == 0:
l.insert(idx+1,i2)
prev = idx+2
count = 1
print "in if2"
print l
print prev
答案 0 :(得分:3)
l, b = [1,1,1,1,1,1], ['-', 2, 2, 2, '-', 2]
print [item for items in zip(l, b) for item in items if item != '-']
<强>输出强>
[1, 1, 2, 1, 2, 1, 2, 1, 1, 2]
如果其中一个列表中的元素数量不等于另一个列表中的元素数量,则可以像这样使用itertools.izip_longest
l, b = [1,1,1,1,1,1], ['-', 2, 2, 2, '-', 2, 2, 2]
from itertools import izip_longest
print [e for items in izip_longest(l,b) for e in items if e != None and e != '-']
<强>输出强>
[1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2]
答案 1 :(得分:0)
您可以使用“链式”列表理解(即使用两个for
循环)和过滤器(x!='-'
):
l1 = [1,1,1,1,1,1]
l2 = ['-', 2, 2, 2, '-', 2]
[ x for (a,b) in zip(l1,l2) for x in (a,b) if x != '-' ]
=> [1, 1, 2, 1, 2, 1, 2, 1, 1, 2]