【问题标题】: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 循环生成输出。但是,如果有人对上述代码的实现有更好的想法,我很感激,无论是通过内联循环还是其他更快的方式。

【问题讨论】:

    标签: python-3.x list subitem


    【解决方案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'}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多