列表理解与交叉问题

2024-04-24 05:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

list(set(a[0]) & set(a[1]) & set(a[2]) & set(a[3]) & set(a[4]))

有没有人知道如何写这个,这样我们就不需要事先知道我们会得到多少个列表?(即5不是硬编码的)?你知道吗

每个a是一个大小不一的列表。你知道吗


Tags: 编码列表listset
2条回答

只要您至少有一套,就可以这样做:

list(set(a[0]).intersection(*a[1:]))

如果可能没有集合,则必须自己决定“无集合的交集”在应用程序中的实际含义。如果您想要空集:

list(set(*a[:1]).intersection(*a[1:]))

我认为值得注意的是,至少要提高人们对编程的一般理解,您要做的可以描述为映射,然后减少折叠。具体来说,您希望将set映射到a上,然后将&折叠到结果上。你知道吗

我不是Python专家,但在Python中可以这样做:

from functools import reduce

a = [
    [1,2,3],
    [1,2,3,4],
    [1,2,4,5],
    [1,2,3,5],
]

intersection = lambda x, y: x & y

mapped = list(map(set, a))

reduced = reduce(intersection, mapped)

请注意,此实现要求a为非空。你知道吗

相关问题 更多 >