簡體   English   中英

用於拼接列表的單行程序

[英]One-liner for splicing lists

我正在尋找一種基於其中一個值的兩個列表拼接的pythonic方法。 單線是優選的。

說我們有

[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']

您可以使用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']

一個班輪:

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]] )

@ Ajax1234的答案類似,但在一行上:

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM