簡體   English   中英

python嵌套列表理解中的if else邏輯

[英]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.

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