counting element occurrences in nested lists

前端 未结 3 1435
悲&欢浪女
悲&欢浪女 2021-01-13 16:58

This is probably quite a straightforward question, but I can\'t find an answer elsewhere so I\'ll ask. What is the best way to find the number of times an element appears in

相关标签:
3条回答
  • 2021-01-13 17:38

    Use a nested generator expression:

    Counter(x for sublist in my_list for x in sublist)
    

    To count the items in the first position, a different generator expression gets that item for counting:

    Counter(sublist[0] for sublist in my_list)
    

    Demo:

    >>> from collections import Counter
    >>> my_list=[['a','b','c','d'],['a','b','z','d'],['a','c','f','e'],['d','w','f','a']]
    >>> Counter(x for sublist in my_list for x in sublist)
    Counter({'a': 4, 'd': 3, 'c': 2, 'b': 2, 'f': 2, 'e': 1, 'w': 1, 'z': 1})
    >>> Counter(sublist[0] for sublist in my_list)
    Counter({'a': 3, 'd': 1})
    
    0 讨论(0)
  • 2021-01-13 17:47
    >>> from collections import defaultdict, Counter
    >>> my_list = [['a', 'b', 'c', 'd'], ['a', 'b', 'z', 'd'], ['a', 'c', 'f', 'e'], ['d', 'w', 'f', 'a']]
    >>> pos_count = defaultdict(Counter)
    >>> for sublist in my_list:
            for i, c in enumerate(sublist):
                pos_count[c][i] += 1
    
    
    >>> pos_count['a'][0]
    3
    >>> pos_count['b'][1]
    2
    
    0 讨论(0)
  • 2021-01-13 17:58
    from collections import Counter
    from itertools import chain
    
    counts = Counter(chain.from_iterable(my_list))
    

    or generate a new list and use count:

    new_list = list(chain.from_iterable(my_list))
    print new_list.count(whatever)
    

    If you wanted how many times 'a' is the first, then something like:

    sum(1 for el in my_list if el[0] is a) # or == a if object identity is not required
    
    0 讨论(0)
提交回复
热议问题