подсчитайте уникальный список в list на Python

#python #list #count

#python #Список #подсчитайте

Вопрос:

Как я могу подсчитать каждый список в list на 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
  

Спасибо.

Комментарии:

1. Какой формат требуется? Должно ли это быть в dataframe или в каком-либо файле? Что вы уже пробовали?

2. Вам нужен Counter .

3. @pistol2myhead спасибо. и на самом деле меня не волнует формат вывода, и я уже пробовал Counter.

4. Счетчик подсчитывает только строку, я думаю, в этом случае не работает для каждого списка

Ответ №1:

Если вас не волнует формат вывода, один из вариантов — включить подсписки в 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})
  

Комментарии:

1. это сработало! большое спасибо, я самостоятельно разобрался с его форматом, спасибо!

Ответ №2:

 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
  

Ответ №3:

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

 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}