Python - 交替列表

时间:2014-01-19 19:27:40

标签: python list

我在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

2 个答案:

答案 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]