您能否建議如何在串列串列中將 n 個串列合并在一起?例如:
[[7, 8, 0], [6, 0, 0], [0, 0, 0], [4, 0, 0], [0, 7, 5], [6, 0, 1], [1, 2, 0], [0, 0, 9], [0, 7, 8], [], [], [], [0, 0, 7], [0, 0, 1], [9, 0, 4], [0, 4, 0], [0, 5, 0], [0, 6, 0], [2, 6, 0], [9, 3, 0], [0, 0, 5], [], [], [], [0, 7, 0], [1, 2, 0], [0, 4, 9], [3, 0, 0], [0, 0, 7], [2, 0, 6], [0, 1, 2], [4, 0, 0], [0, 0, 7], [], [], []]
--> 我想將每 3 個串列合并在一起,所以我得到[[7, 8, 0, 6, 0, 0, 0, 0, 0], [4, 0, 0, 0, 7, 5, 6, 0, 1], ... ]
uj5u.com熱心網友回復:
zip 將成為您的朋友:
list_ = [[7, 8, 0], [6, 0, 0], [0, 0, 0], [4, 0, 0], [0, 7, 5], [6, 0, 1], [1, 2, 0], [0, 0, 9], [0, 7, 8], [], [], [], [0, 0, 7], [0, 0, 1], [9, 0, 4], [0, 4, 0], [0, 5, 0], [0, 6, 0], [2, 6, 0], [9, 3, 0], [0, 0, 5], [], [], [], [0, 7, 0], [1, 2, 0], [0, 4, 9], [3, 0, 0], [0, 0, 7], [2, 0, 6], [0, 1, 2], [4, 0, 0], [0, 0, 7], [], [], []]
new_list = [e1 e2 e3 for e1, e2, e3 in zip(list_[::3], list_[1::3], list_[2::3])]
print(new_list)
輸出:
[[7, 8, 0, 6, 0, 0, 0, 0, 0], [4, 0, 0, 0, 7, 5, 6, 0, 1], [1, 2, 0, 0, 0, 9, 0, 7, 8], [], [0, 0, 7, 0, 0, 1, 9, 0, 4], [0, 4, 0, 0, 5, 0, 0, 6, 0], [2, 6, 0, 9, 3, 0, 0, 0, 5], [], [0, 7, 0, 1, 2, 0, 0, 4, 9], [3, 0, 0, 0, 0, 7, 2, 0, 6], [0, 1, 2, 4, 0, 0, 0, 0, 7], []]
uj5u.com熱心網友回復:
我想這樣的事情會起作用:
original_lists = [[7, 8, 0], [6, 0, 0], [0, 0, 0], [4, 0, 0], [0, 7, 5], [6, 0, 1], [1, 2, 0], [0, 0, 9], [0, 7, 8], [], [], [], [0, 0, 7], [0, 0, 1], [9, 0, 4], [0, 4, 0], [0, 5, 0], [0, 6, 0], [2, 6, 0], [9, 3, 0], [0, 0, 5], [], [], [], [0, 7, 0], [1, 2, 0], [0, 4, 9], [3, 0, 0], [0, 0, 7], [2, 0, 6], [0, 1, 2], [4, 0, 0], [0, 0, 7], [], [], []]
new_list = []
k = 3
assert(len(original_list) % k == 0)
for i in range(0,len(original_list,k):
x = []
for l in original_list[i:i k]:
x.extend(l)
new_list.append(x)
uj5u.com熱心網友回復:
使用索引模 3 方法:
lst = # from question
out = [[]]
for i, l in enumerate(lst):
if not i % 3:
out[-1].append([])
out[-1][-1].extend(l)
print(out)
請注意,連續的空串列被壓縮成一個
編輯:也要跟蹤空串列:
out = [[]]
for i, l in enumerate(lst):
if not i % 3:
out[-1].append([])
if not l:
out[-1][-1].append(l)
else:
out[-1][-1].extend(l)
編輯2:使用itertools.islice(不是最佳的)
from itertools import chain, islice
lst = #...
k = 3
[list(chain.from_iterable(islice(lst, i*k, (i 1)*k ))) for i in range(len(lst)//k)]
或(我最喜歡的)
from itertools import chain
k = 3
list(map(list, map(chain , *[lst[i%k::k] for i in range(k)])))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/481192.html
上一篇:R中資料幀的逐元素rbind串列
