2013-05-13 3 views
0

У меня есть массив, состоящий из набора списков строк (можно считать каждую строку одним словом).подсчет числа совпадений в списке

Я хочу, чтобы эффективный способ в Python подсчитывать пары слов в этом массиве.

Это не коллокация или биграмы, так как каждое слово в паре может находиться в любом положении в списке.

+5

Набор списков строк не работает в python (хотя, я полагаю, вы, вероятно, не имеете в виду набор Python). Пожалуйста, покажите пример – jamylak

+0

Сколько строк в каждом списке? – gnerkus

+0

Не могли бы вы привести пример вашего списка? –

ответ

0

Неясно, как ваш список, Является ли это что-то вроде:

li = ['hello','bye','hi','good','bye','hello'] 

Если да решение простое:

In [1342]: [i for i in set(li) if li.count(i) > 1] 
Out[1342]: ['bye', 'hello'] 

В противном случае, если это как:

li = [['hello'],['bye','hi','good'],['bye','hello']] 

Затем:

In [1378]: f = [] 

In [1379]: for x in li: 
..........  for i in x: 
..........   f.append(i) 

In [1380]: f 
Out[1380]: ['hello', 'bye', 'hi', 'good', 'bye', 'hello'] 

In [1381]: [i for i in set(f) if f.count(i) > 1] 
Out[1381]: ['bye', 'hello'] 
0
>>> from itertools import chain 
>>> from collections import Counter 
>>> L = [['foo', 'bar'], ['apple', 'orange', 'mango'], ['bar']] 
>>> c = Counter(frozenset(x) for x in combinations(chain.from_iterable(L), r=2)) 
>>> c 
Counter({frozenset(['mango', 'bar']): 2, frozenset(['orange', 'bar']): 2, frozenset(['foo', 'bar']): 2, frozenset(['bar', 'apple']): 2, frozenset(['orange', 'apple']): 1, frozenset(['foo', 'apple']): 1, frozenset(['bar']): 1, frozenset(['orange', 'mango']): 1, frozenset(['foo', 'mango']): 1, frozenset(['mango', 'apple']): 1, frozenset(['orange', 'foo']): 1})