counting element occurences in nested lists
这可能是一个非常直截了当的问题,但我在别处找不到答案,所以我会问。找到元素出现在嵌套列表中的次数的最佳方法是什么?例如:
1 | my_list=[[a,b,c,d],[a,b,z,d],[a,c,f,e],[d,w,f,a]] |
我如何找到"a"是列表的第一个元素的次数?或者更一般地说,"A"会出现在我的"U"列表中多少次?我想有一种方法可以处理收藏品。柜台,但我还没弄清楚。
编辑对于我的_列表,如果它是列表的第一个元素,我希望在计算时输出
使用嵌套生成器表达式:
1 | Counter(x for sublist in my_list for x in sublist) |
要对第一个位置中的项进行计数,不同的生成器表达式将获取该项进行计数:
1 | Counter(sublist[0] for sublist in my_list) |
号
演示:
1 2 3 4 5 6 | >>> 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}) |
1 2 3 4 | from collections import Counter from itertools import chain counts = Counter(chain.from_iterable(my_list)) |
。
或者生成一个新列表并使用count:
1 2 | new_list = list(chain.from_iterable(my_list)) print new_list.count(whatever) |
如果你想知道"a"是第一个多少次,那么应该是:
1 | sum(1 for el in my_list if el[0] is a) # or == a if object identity is not required |
。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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 |
。