单线拼接列表

时间:2019-08-09 13:53:42

标签: python

我正在寻找一种基于Python的方式,根据其中一个的值拼接两个列表。单线比较好。

说我们有

[0, 1, 1, 0, 0, 1, 1, 1, 0, 1]

['a', 'b', 'c', 'd', 'e', 'f']

结果必须如下所示:

[0, 'a', 'b', 0, 0, 'c', 'd', 'e', 0, 'f']

3 个答案:

答案 0 :(得分:10)

您可以将nextiter一起使用:

d = [0, 1, 1, 0, 0, 1, 1, 1, 0, 1]
d1 = ['a', 'b', 'c', 'd', 'e', 'f']
new_d = iter(d1)
result = [i if not i else next(new_d) for i in d]

输出:

[0, 'a', 'b', 0, 0, 'c', 'd', 'e', 0, 'f']

答案 1 :(得分:2)

一个班轮:

d = [0, 1, 1, 0, 0, 1, 1, 1, 0, 1]
d1 = ['a', 'b', 'c', 'd', 'e', 'f']

print( [d1.pop(0) if i==1 else i for i in d] )

打印:

[0, 'a', 'b', 0, 0, 'c', 'd', 'e', 0, 'f']

编辑(更有效的方法):

d = [0, 1, 1, 0, 0, 1, 1, 1, 0, 1]
d1 = ['a', 'b', 'c', 'd', 'e', 'f'][::-1]

print( [d1.pop() if i==1 else i for i in d[::-1]] )

答案 2 :(得分:0)

类似于@Ajax1234's answer,但在一行上:

d = [0, 1, 1, 0, 0, 1, 1, 1, 0, 1]
d1 = ['a', 'b', 'c', 'd', 'e', 'f']
result = [d[i] if not d[i] else d1[d[:i].count(1)] for i in range(len(d))]

结果:

[0, 'a', 'b', 0, 0, 'c', 'd', 'e', 0, 'f']