我正在嘗試在 python 中撰寫一個陳述句來轉換此輸入(例如):
[[3,4],[1],[1,2]]
進入這個輸出:
[3,4,-,1,-,1,2]
僅使用 zip 和串列理解
這是我的代碼:
a = [[1,2],[1],[3,4]]
result = [j for i in zip(a,'-'*len(a)) for j in i]
print(result)
但我得到的是:
[[1, 2], '-', [1], '-', [3, 4], '-']
我的輸出應該是這樣的:
[1, 2, '-', 1, '-', 3, 4]
我錯過了什么?
uj5u.com熱心網友回復:
這應該有效:
a = [[1,2],[1],[3,4]]
result = [a for i in zip(a,'-'*len(a)) for j in i for a in j]
print(result)
輸出:
[1, 2, '-', 1, '-', 3, 4, '-']
如果您不希望包含最后一個,這也適用'-':
a = [[1,2],[1],[3,4]]
result = [a for i in zip(a, '-'*len(a)) for j in i for a in j][:-1]
print(result)
輸出:
[1, 2, '-', 1, '-', 3, 4]
uj5u.com熱心網友回復:
添加另一個for子句并在除第一個之外的每個內部串列之前添加分隔符:
[k for i in zip([[]] ['-']*len(a), a) for j in i for k in j]
結果(在線嘗試!):
[1, 2, '-', 1, '-', 3, 4]
給出這zip(...)三對:
([], [1, 2])
('-', [1])
('-', [3, 4])
然后j是內部串列/字串,并且k是數字/字符,因此我們可以將k其用于串列推導的結果元素。
uj5u.com熱心網友回復:
你可以這樣做:
a = [[3,4],[1],[1,2]]
result = []
for i,l in enumerate(a):
result = l ["-"] * (i!=len(a)-1)
print(result) # [3, 4, '-', 1, '-', 1, 2]
uj5u.com熱心網友回復:
這是一個重用部分代碼并僅使用 itertools 庫來實作目標的解決方案:
# import chain
from itertools import chain
a = [[1,2],[1],[3,4]]
result = list(chain.from_iterable(
[j for i in zip(a,'-'*len(a)) for j in i]))[:-1]
print(result)
和你的輸出:
[1, 2, '-', 1, '-', 3, 4]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/452127.html
標籤:Python python-3.x 列表 列表理解 蟒蛇压缩
