[英]If else logic in python nested list comprehension
我有一個列表,可以由列表或整數或無組成。 我想將此列表內的可迭代元素(現在僅假設列表)展平為單個元素。
例如:
[[0, 1], [2, 3], 1, 3, 4, 0, None] into [0,1,2,3,1,3,4,0,None]
使用列表理解。 我發現了另一個類似的問題,但是所有這些元素在該列表中都是可迭代的,因為我的也有整數,如果列表理解第一個“ for循環”中的邏輯,我也應該使用整數。 我正在嘗試類似的方法,但不確定確切的語法是什么。
[如果為isinstance(sublist,list),則為項目子列表,否則為A中的子列表的[sublist]為子列表中的項目]
基於其他問題,if-else應該在for循環之前發生,並且for循環必須按順序發生。 我無法在第一個for循環后插入if,否則語法只能在if時插入,否則不能插入。
有人可以幫忙解決一下這個語法,以便在理解的第一個for循環或嵌套的for循環中的任何中間for循環上執行if-else嗎?
您可以使用生成器將混合列表轉換為僅包含列表的可迭代對象:
gen = (x if isinstance(x, collections.Iterable) else [x] for x in A)
然后,您可以使用標准的拼合習慣來拼合生成器:
flattened = [y for x in gen for y in x]
@mgilson使用理解力給出了一種優雅的解決方案。 也可以使用錯誤捕獲在自然循環中這樣做:
items = [[0, 1], [2, 3], 1, 3, 4, 0, None]
flattened = []
for item in items:
try:
flattened.extend(item)
except TypeError:
flattened.append(item)
print(flattened) #prints [0, 1, 2, 3, 1, 3, 4, 0, None]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.