簡體   English   中英

變量列表項的長度

[英]Variable list item's length

我有一個列表,其中每個元素可以具有不同數量的元素。 在lst1中,每個列表項有3個項目,而在lst2中,每個列表項有2個項目。

lst1=[([{'s1'}, 30], [{'s2'}, 28], [{'s3'}, 28]), ([{'s1'}, 30], [{'s2'}, 28], [{'s4'}, 30])]

lst2=[([{'s1'}, 30], [{'s2'}, 28]), ([{'s1'}, 30], [{'s4'}, 22])]

通常,列表元素的數量不是固定的,並且列表的每個項自身內部將包含1,2、3、4、5或6個項(在lst1中,每個列表項包含3個項)。 給定ls1時應生成的輸出如下:

[{'s1','s2','s3'},{'s1','s2','s4'}]

雖然預期lst2具有以下結果:

[{'s1','s2'},{'s1','s4'}] 

以下代碼僅適用於lst2:

[x[0][0]|x[1][0] for x in lst2]

實際上,問題是將這部分代碼“ x [0] [0] | x [1] [0]”轉換為動態代碼。 如果列表的每個項目都有2個子項目,則'x [0] [0] | x [1] [0]'可以正常工作。 同時,如果列表中的每個項目都有3個子項目,則我們應具有“ x [0] [0] | x [1] [0] | x [2] [0]”,等等。

我知道如何使用多個for循環生成輸出。 但是,如果有人通過內聯循環或其他更快的方法來實現上述代碼,我將不勝感激。

您應該使用通用集合並集運算符而不是二進制並集運算符。

[set.union(*[x[0] for x in item]) for item in lst1]
#[{'s1', 's2', 's3'}, {'s1', 's2', 's4'}]
[set.union(*[x[0] for x in item]) for item in lst2]
#[{'s1', 's2'}, {'s1', 's4'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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