【问题标题】:Compare two lists and return a matching set iteratively [closed]比较两个列表并迭代地返回匹配集[关闭]
【发布时间】:2021-08-26 18:33:58
【问题描述】:

因此,当您有两个列表时,很容易比较以获取匹配值,即

set(a) & set(b)

但是我将如何在函数中执行此操作,即当我有 n 个列表时,这取决于输入参数 n?

【问题讨论】:

  • 以同样的方式组合它们?我不明白问题出在哪里。
  • 如果列表的数量是任意的,我如何将它写在一个函数中,以便函数自己连接它们?问题是,如果函数总是输出 2 个列表,那么上面的代码只是复制粘贴,但如果有 6 个列表,它将不起作用。
  • 您能否举例说明一些输入和预期输出?我理解“我有 n 个列表”,但不是“取决于输入参数 n”。 n 是实际传递给“你的”函数的数字吗?列表如何依赖它?
  • 如果输入是整数并且你想将它们相乘,你会怎么做?

标签: python list set itertools


【解决方案1】:

这就是functools.reduce 的用途

from functools import reduce

total = reduce(set.intersection, map(set, list_of_lists))

这只是一个预定义的函数,包含了执行以下操作的想法:

total = set()
for x in list_of_lists:
    total &= set(x)

【讨论】:

  • set.intersection 接受任意 man 项目,只要第一个是 set - set.intersection(*map(set, list_of_lists)) 应该足够了,不需要 reduce。使用operator.__or__ 需要reduce
  • 我知道;我用reduce 发布了一个答案,因为它适用于任何运营商。
【解决方案2】:

下面将得到第一个集合与其余集合的交集。

这就是你要找的吗?

def do_it(*sets):
   return set.intersection(*sets)


print(do_it({1, 2, 34}, {3, 6, 8, 34}, {3, 65, 86, 34}))

输出

{34}

【讨论】:

  • 如果item是set,那么set.intersection(*sets)就足够了。
  • @MisterMiyagi 代码已修改。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2016-12-23
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多