Подсчитать количество списков в списке (вложенный список) для каждой длины Python - PullRequest
1 голос
/ 02 мая 2020

У меня есть список списков, который содержит строки. Например:

[['apple', 'pear', 'apple'], ['apple', 'apple'], ['apple', 'pear', 'apple','apple', 'pear', 'apple']]

В этом списке около 2000 списков, каждый из которых содержит различное количество строк. Я хотел бы видеть, сколько подсписков определенной длины в этом списке. Например:

Длина 2 строки: 70 списков Длина 3 строки: 45 списков Etcetera.

Лог c способ сделать это (я думаю) состоит в том, чтобы сделать oop для длины желания, а затем разыграйте это l oop для всех длин, для которых я хочу количество списков.

Я мог бы представить, что это что-то вроде этого:

def countList(lst, x): 
    count = 0
    for i in range(len(lst)): 
        if x in lst[i]: 
            count+= 1

    return count

x = .....

Но я не уверен, потому что я не знаю, как подсчитать сумму.

Если бы кто-то мог помочь мне, это было бы здорово !!

Ответы [ 4 ]

4 голосов
/ 02 мая 2020

Встроенный collections.Counter элегантно справляется с этим:

>>> from collections import Counter
>>> mydata = [['apple', 'pear', 'apple'], ['apple', 'apple'], ['apple', 'pear', 'apple','apple', 'pear', 'apple']]
>>> Counter(map(len, mydata))
Counter({3: 1, 2: 1, 6: 1})
>>> Counter(len(sublist) for sublist in mydata) # or with a generator expression
Counter({3: 1, 2: 1, 6: 1})
4 голосов
/ 02 мая 2020

Вы можете передать длины в collections.Counter с чем-то вроде:

from collections import Counter

l = [['apple', 'pear', 'apple'], ['apple', 'apple'],['apple', 'apple'],['apple', 'apple'], ['apple', 'pear', 'apple','apple', 'pear', 'apple'], ['apple', 'pear', 'apple']]

counts = Counter(map(len,l))

И получить словарь counts вроде:

Counter({3: 2, 2: 3, 6: 1})

Есть 2 длины 3, 3 длины 2 и 1 длины 6.

Вы можете получить доступ к счетам, как в любом словаре:

>> counts[2]
3 
0 голосов
/ 02 мая 2020
lst = [['apple', 'pear', 'apple'], ['apple', 'apple'], ['apple', 'pear', 'apple','apple', 'pear', 'apple'], ['mango', 'apple'], ['mango', 'mango']]

ctr_dict = {}

for i in lst:
    item_length = len(i)
    if str(item_length) in ctr_dict:
        ctr_dict[str(item_length)] = ctr_dict[str(item_length)] + 1
    else:
        ctr_dict[str(item_length)] = 1

for k,v in ctr_dict.items():
    print(k," strings:", v, "lists")
output: 
3  strings: 1 lists
2  strings: 3 lists
6  strings: 1 lists
0 голосов
/ 02 мая 2020
lst = [['apple', 'pear', 'apple'], ['apple', 'apple'], ['apple', 'pear', 'apple','apple', 'pear', 'apple'],['apple', 'apple']]
def countList(lst): 
    lst_dict = {}
    for i in lst:
        if len(i) not in lst_dict:
            lst_dict[len(i)] = 1
        else:
            lst_dict[len(i)] = lst_dict[len(i)]+1
    return lst_dict

print(countList(lst))

>> {3: 1, 2: 2, 6: 1}

Здесь ключи - длина списков, а значения - количество списков.

...