可变列表项的长度
Posted
技术标签:
【中文标题】可变列表项的长度【英文标题】:Variable list item's length 【发布时间】:2019-08-11 22:23:21 【问题描述】:我有一个列表,其中每个元素都可以有不同数量的元素。在 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 循环生成输出。但是,如果有人对上述代码的实现有更好的想法,我很感激,无论是通过内联循环还是其他更快的方式。
【问题讨论】:
【参考方案1】:你应该使用一个通用的集合联合操作而不是二元联合操作。
[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']
【讨论】:
以上是关于可变列表项的长度的主要内容,如果未能解决你的问题,请参考以下文章