#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}