подсчитать уникальный список в списке в Python - PullRequest
0 голосов
/ 07 марта 2019

Как я могу подсчитать каждый список в списке в Python? Я особенно хочу знать, сколько их общего.

пример:

list=[["a", "b", "c"], ["a", "A", "b"], ["B", "c", "C"],["a", "b", "c"]]

желаемый вывод:

 value            counts
["a", "b", "c"]   2
["a", "A", "b"]   1
["B", "c", "C"]   1

Спасибо.

Ответы [ 3 ]

4 голосов
/ 07 марта 2019

Если вам не важен формат вывода, один из вариантов - перевести подсписки в tuples, а затем использовать collections.Counter.

Причина этого заключается в том, что Counter возвращает хеш-таблицу, и только неизменяемые типы могут быть хэшируемыми, поэтому обходной путь заключается в приведении подсписка к tuples, который является неизменным в отличие от списков:

from collections import Counter

Counter([tuple(i) for i in l])

Выход

Counter({('a', 'b', 'c'): 2, ('a', 'A', 'b'): 1, ('B', 'c', 'C'): 1})
0 голосов
/ 07 марта 2019

Подробный параметр без зависимостей:

lst = [["a", "b", "c"], ["a", "A", "b"], ["B", "c", "C"],["a", "b", "c"]]

res = {}
for array in lst:
    res.setdefault(tuple(array), list()).append(1)

Создает словарь, в котором подсписок является ключом, добавляя 1 при каждом совпадении. Затем измените ключи с суммой вместо:

for k,v in res.items():
  res[k] = sum(v)
  # print(k, res[k])

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

# ('a', 'b', 'c') 2
# ('a', 'A', 'b') 1
# ('B', 'c', 'C') 1

А res сейчас:

res #=> {('a', 'b', 'c'): 2, ('a', 'A', 'b'): 1, ('B', 'c', 'C'): 1}
0 голосов
/ 07 марта 2019
from collections import Counter
list1 = [["a", "b", "c"], ["a", "A", "b"], ["B", "c", "C"],["a", "b", "c"]]
dictionary = Counter([tuple(i) for i in list1])
dd = pd.DataFrame(data={'list': list(dictionary.keys()),'count': list(dictionary.values())})
print(dd)

вывод:

        list  count
0  (a, b, c)      2
1  (a, A, b)      1
2  (B, c, C)      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...