2013-08-11 3 views
0

Вход:Найти элементы, которые существуют в большинстве списков

[[1,2,3],[1,5,7],[1,9,3],[4,3,8]] 

Ожидаемый результат:

[1,3] 

(добавить элемент в результате, если он существует в более чем 50% входных списков).

Я ищу элегантное, питоническое решение :). Извините за мой плохой английский.

+0

Возможно, вы могли бы показать неуравновешенное/нерепистическое решение, которое вы уже придумали, чтобы мы могли помочь вам его улучшить? – Brionius

+0

Кроме того, гарантируется ли, что каждый элемент будет отображаться не более одного раза в подгруппе? То есть будет ли это появляться во входном файле: '[[1, 1, 2], [3, 4, 5]]'? – Brionius

+0

1) Я пока не писал никакого решения. 2) Да, это так. – user2672903

ответ

4

Как насчет:

>>> from collections import Counter 
>>> s = [[1,2,3],[1,5,7],[1,9,3],[4,3,8]] 
>>> count = Counter(term for subseq in s for term in set(subseq)) 
>>> [k for k,v in count.items() if v > len(s)//2] 
[1, 3] 

Counter представляет собой удобный инструмент, который, ну, отсчитывает вещи:

>>> Counter([1,2,3,3,2]) 
Counter({2: 2, 3: 2, 1: 1}) 

[.. упс, только что заметил, что вы используете Python 3, так что нам нужно .Предметы()].

+0

Спасибо! Он выглядит (и работает) отлично. Мне нужно было изменить «iteritems» на «items», возможно, из-за python3. – user2672903