У меня есть список списков, который выглядит какКак получить количество списков с определенным элементом?
listOfLists = [
['a','b','c','d'],
['a','b'],
['a','c'],
['c','c','c','c']
]
Я хочу, чтобы подсчитать количество списков, которые имеют определенный элемент. Например, мой вывод должен быть
{'a':3,'b':2,'c':3,'d':1}
Как вы можете видеть, мне не нужен общий счет элемента. В случае "c"
, хотя его общий счет равен 5, выход равен 3, поскольку он встречается только в 3 списках.
Я использую счетчик, чтобы получить счет. То же самое можно увидеть ниже.
line_count_tags = []
for lists in lists_of_lists:
s = set()
for element in lists:
s.add(t)
lines_count_tags.append(list(s))
count = Counter([count for counts in lines_count_tags for count in counts])
Так что, когда я печатаю счет, я получаю
{'a':3,'c':3,'b':2,'d':1}
Я хочу знать, если есть гораздо лучший способ для достижения своей цели.
Я получаю намного более быстрое выполнение, используя 'itertools.chain' (~ 40%!) На CPython 2.7.11. Тем не менее, 'Counter' +' itertools.chain' выполняется в 4 раза медленнее, чем метод 'raw', который я представил. – zwer
@zwer Eh, зависит от размера ввода, который мы обсуждаем. У моего решения больше накладных расходов, но если вы увеличиваете размер ввода, он будет быстрее. Вот почему бенчмаркинг не так уж и важен :) – miradulo
Правда, я был просто удивлен резкой разницей в скорости на моем месте, я не привык к тому, что «itertools» действительно превосходит, ну, почти что угодно - они обычно более медленный, но более удобный для чтения выбор: D – zwer