可变列表项的长度

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']

【讨论】:

以上是关于可变列表项的长度的主要内容,如果未能解决你的问题,请参考以下文章

从具有可变长度的列表字典创建数据框

PHP 可变长度参数列表

C++ 从可变长度参数列表中提取 std::string

在熊猫中将可变长度列表保存到 HDF5

PHP:通过引用的可变长度参数列表?

如何使用只有一个参考参数的可变长度参数列表?