以下代码针对此列表的元组的前三个元素运行
SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] from collections import Counter c = Counter(elem[0:3] for elem in SS1) for k, v in c.items(): if (v > 0): print(k,v)
输出为:
(1, 2, 3) 3 (1, 2, 4) 1 (1, 3, 4) 1 (2, 3, 4) 1
但是我的期望不仅限于前三个元组…我想要元组(0,2,3)或元组的计数器,(1,2,4)我也可以通过元组的任何三个位置并获得其计数…我该怎么做?
(0,2,3)
(1,2,4)
如果我从您的问题中理解的是正确的,则以下代码将解决您的问题:
SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] from collections import Counter def get_new_list(a, pos): # Check if any element in pos is > than the length of the tuples if any(k >= len(min(SS1, key=lambda x: len(x))) for k in pos): return for k in a: yield tuple(k[j] for j in pos) def elm_counter(elm): if not len(elm): return c = Counter(elm) for k, v in c.items(): if v > 0: print(k, v) elm = list(get_new_list(SS1, (0, 2, 4))) elm_counter(elm) print('---') elm = list(get_new_list(SS1, (1, 2, 4))) elm_counter(elm)
输出:
(1, 3, 5) 1 (1, 3, 6) 2 (1, 4, 6) 2 (2, 4, 6) 1 --- (2, 3, 6) 2 (2, 3, 5) 1 (3, 4, 6) 2 (2, 4, 6) 1