2010-10-25 4 views
1

Я новичок в Python, я работал со списком в течение 2 месяцев, и у меня есть некоторые вопросы. У меня есть список, и у них есть дубликаты. Я могу получить дубликаты между двумя списками, теперь я хочу, чтобы количество списков и глубины увеличилось, как в этом примере: http://i219.photobucket.com/albums/cc213/DoSvn/example.png. Я хочу, чтобы родители дублировали элементы из красной части, а не из голубой части или списка этих дубликатов. Как мне это сделать ? Спасибо :)Как получить наименьший список дубликатов из списка списков?


Update: Благодарим за ваши ответы: D Я использовал набор, и это здорово. Но я думаю, если я не знаю о размере списка списков и не более того, это динамические списки, могу ли я получить все красные части, подобные этому примеру: http://i219.photobucket.com/albums/cc213/DoSvn/example02.png?

+0

Рассматривали ли вы с помощью наборов вместо списков? –

+0

Совсем случайно, что вы описываете, есть жуткое сходство с диаграммами venn (http://en.wikipedia.org/wiki/Venn_diagram) –

+0

Спасибо за ваши ответы: D Я использовал Set и отлично. Но я думаю, если я не знаю о размере списка списков и не более того, это динамические списки, могу ли я получить все красные части, подобные этому примеру: http://i219.photobucket.com/albums/ cc213/DoSvn/example02.png? –

ответ

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 
+0

Я использую python 2.5 из-за GAE :) Я думаю, что я буду использовать «Set» с некоторыми условиями для решения проблемы, но не успешно, но, возможно, это даст мне хороший результат для использования в моем приложении: D спасибо :) –

+1

Вот вы, версия для Python 2.5 – eumiro

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]) 
+0

Спасибо :) ваш ответ полезен: D У меня есть другой вопрос, вы можете мне помочь? Я думаю, если я не знаю о размере списка списков и не более того, это динамические списки, могу ли я получить все красные части, подобные этому примеру: http://i219.photobucket.com/albums/cc213 /DoSvn/example02.png? –

+0

@ ducanh.do88 - обновите свой вопрос с последующей проблемой – eumiro