我有以下列表:通過不同長度這是一個列表中的列表迭代
a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
,我希望把所有的整數,使串了出來:
b = '1001010010100'
有什麼辦法可以做到這一點? 提前謝謝!
我有以下列表:通過不同長度這是一個列表中的列表迭代
a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
,我希望把所有的整數,使串了出來:
b = '1001010010100'
有什麼辦法可以做到這一點? 提前謝謝!
這裏是一個叛逆的做法:
a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
b = ''.join(c for c in str(a) if c.isdigit())
這很聰明。 –
@Yakym Pirozhenko非常感謝你! –
...和智慧+1 ...我不會真的推薦這種方法,但... –
碼 -
def solve(x):
if isinstance(x, int):
return str(x)
return ''.join(solve(y) for y in x)
print(solve(a))
輸出 -
1001010010100
謝謝!你真的幫了我! –
您可以編寫遞歸遍歷的嵌套上市,並嘗試將每個元素轉換爲迭代器的功能。
def recurse_iter(it):
if isinstance(it, basestring):
yield it
else:
try:
for element in iter(it):
for subelement in recurse_iter(element):
yield subelement
except TypeError:
yield it
這個可惡的函數將產生一個對象中的字符串和非可迭代成員的列表。
a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
list(recurse_iter(a))
# [1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]
將此轉換爲字符串足夠簡單。
''.join(map(str, recurse_iter(a)))
雖然它適用於這種情況,但一般解決方案應該檢查一個元素是否是字符串,以便它不會開始產生單個字符。 –
@BrianSchlenker該案件將導致無限遞歸。我會稍後更新。 –
我喜歡這個答案,因爲它給你選擇[有條件地]修改列表中的所有項目,不管它們有多深。 – Oisin
你正在尋找一個flatten功能:
def flatten_str(x):
if isinstance(x, list):
return "".join(flatten_str(a) for a in x)
else:
return str(x)
非常感謝! –
我覺得這裏更普遍的問題是如何遍歷n維列表。非常好的問題... – Oisin