我正在寻找一种基于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']
答案 0 :(得分:10)
您可以将next
与iter
一起使用:
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']