我试图在元组中找到一组列表

时间:2016-02-22 21:05:51

标签: python

例如,

(['2', '3', '5'], ['1', '3', '4', '5'])

以上应该产生数字3和5

(['1', '2', '4'], ['1', '2'])

这应该给出1,2

(['2', '3', '5'], ['1', '2', '4'], ['2', '3'])

这个,应该给出2,因为2包含在元组的所有3个列表中。如果没有设置,它应该只返回一个空列表

for i,e in enumerate(tup):
while index < len(tup):
    print(tup[index], tup[index + 1])
    index = index + 1

现在我有了这个,我不知道如何通过tup(元组)并提取每个列表以找到每个2列表的集合并迭代并与元组中的其余列表进行比较

4 个答案:

答案 0 :(得分:6)

def intersect(lists):
    return list(set.intersection(*map(set, lists)))

答案 1 :(得分:3)

In [8]: t = (['2', '3', '5'], ['1', '3', '4', '5'])

In [9]: functools.reduce(lambda a,b: set.intersection(set(a), set(b)), t)
Out[9]: {'3', '5'}

答案 2 :(得分:2)

回报类型保持一致。当你有空集时,不要返回一个空字符串。

话虽如此,我发现这样的数字:

>>> lsts = (['2', '3', '5'], ['1', '3', '4', '5'])
>>> set(lsts[0]).intersection(*lsts[1:])
set(['3', '5'])
>>> 
>>> lsts = (['1', '2', '4'], ['1', '2'])
>>> set(lsts[0]).intersection(*lsts[1:])
set(['1', '2'])
>>> 
>>> lsts = (['2', '3', '5'], ['1', '2', '4'], ['2', '3'])
>>> set(lsts[0]).intersection(*lsts[1:])
set(['2'])

该功能将是:

>>> def common(lsts):
...     return set() if not lsts else set(lsts[0]).intersection(*lsts[1:])

答案 3 :(得分:1)

这很简单:python有一个集合类型,所以只需

sets = [set(l) for l in (['2', '3', '5'], ['1', '3', '4', '5']) ]
common_elements = reduce(lambda a,b: a & b, sets)