如何从列表列表中获取最小的重复项列表?

时间:2010-10-25 04:44:31

标签: python algorithm

我是一名Python新手,我在名单上工作了2个月,我有一些问题。我有一些列表,他们有重复的项目。我可以在两个列表之间获得重复的项目,现在我想要列表的数量和深度增加像这个例子: http://i219.photobucket.com/albums/cc213/DoSvn/example.png。 我想从红色部分获取重复项目的父项,而不是蓝色部分或这些重复项目的列表。我该怎么做 ? 谢谢:))


更新: 感谢您的回答:D我使用了Set,它很棒。但我想如果我不知道列表列表的大小,仅此而已,它们是动态列表,我可以获得所有红色部分,例如:http://i219.photobucket.com/albums/cc213/DoSvn/example02.png

2 个答案:

答案 0 :(得分:1)

如果您正在搜索此类内容:http://i219.photobucket.com/albums/cc213/DoSvn/example02.png

然后你可以试试Counter(Python 2.7+中提供)。它应该像这样工作:

from collections import Counter

c = Counter()
for s in (listOfLists):
    c.update(s)

for item, nbItems in c.iteritems():
    if nbItems == 3:
        print '%s belongs to three lists.' % item

或者使用古老的蟒蛇:

counter = {}

for s in (listOfLists):
    for elem in s:
        counter[elem] = counter.get(elem, 0) + 1

for item, nbItems in counter.iteritems():
    if nbItems == 3:
        print '%s belongs to three lists.' % item

答案 1 :(得分:0)

使用集合,您可以获得交集,并集,减法或任何复杂的组合

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
s3 = set([1, 3, 5, 7, 9])

# now to get duplicate between s1, s2 and s2 take intersection
print s1&s2&s3

输出:

set([5])