假设我有一组元组,每个元组包含两个整数。
mySet = ((1, 3), (3, 4), (3, 5))
从元组中找到公共元素的最佳方法是什么?
对于这种情况,输出将是:
3
答案 0 :(得分:7)
这是一个快速解决方案。
编辑包含genexpr而不是列表理解
mySet = {(1, 3), (3, 4), (3, 5)}
mySet = (set(tup) for tup in mySet)
print(set.intersection(*mySet))
# {3}
答案 1 :(得分:3)
您可以通过使用转换嵌套元组来设置和计算每个元素的交集来实现此目的。
from functools import reduce
def common_elements(s):
return reduce(set.intersection, map(set, s))
>>> common_elements({(1, 3), (3, 4), (3, 5)})
>>> {3}
>>> common_elements({(1, 1), (1, 4), (3, 5)})
>>> set()
Timeit基准
$ python -m timeit -s "from functools import reduce" -s "s = {(1, 3), (3, 4), (3, 5)}" "reduce(set.intersection, map(set, s))"
$ 1000000 loops, best of 3: 1.09 usec per loop
$ python -m timeit -s "from functools import reduce" -s "s = {(0,1) for _ in range(100)}" "reduce(set.intersection, map(set, s))"
$ 1000000 loops, best of 3: 0.5 usec per loop