당신은이 작업을 수행 할 collections.Counter
을 사용할 수 있습니다 나는 또한, 사전 파이썬 3.x에 존재하지 않았다, 여기 풀고 확장 된 튜플을 사용하고
>>> from collections import Counter
>>> a = (('309','308','308'), ('309','308','307'), ('308', '309','306', '304'))
>>> Counter((x, y) for (x, y, *z) in a)
Counter({('309', '308'): 2, ('308', '309'): 1})
>>> Counter((x, z) for (x, y, z, *w) in a)
Counter({('308', '306'): 1, ('309', '308'): 1, ('309', '307'): 1})
하는 불확실한 길이의 튜플이있는 경우에만 필요합니다. 파이썬 2.x에서는 다음과 같이 할 수 있습니다.
Counter((item[0], item[1]) for item in a)
그러나 이것이 얼마나 효율적인지는 말할 수 없습니다. 나는 그것이 나쁘다는 것을 믿지 않는다.
>>> count = Counter((x, y) for (x, y, *z) in a)
>>> count['309', '308']
2
편집 :
Counter
는 dict
-like 문법을 가지고 당신은 그들이 할 수 없습니다이 경우에, 당신은 문제가 실행할 수 그들이, 1보다 큰 길이의 수 있습니다 언급 요구되는 길이보다 짧으면 포장을 푸십시오.
Counter((item[0], item[1]) for item in a if len(item) >= 2)
예 :이 솔루션은 필요한 형식으로 어떤하지를 무시하는 발전기 표현을 변경하는 것입니다
>>> a = (('309',), ('309','308','308'), ('309','308','307'), ('308', '309','306', '304'))
>>> Counter((x, y) for (x, y, *z) in a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/collections.py", line 460, in __init__
self.update(iterable, **kwds)
File "/usr/lib/python3.2/collections.py", line 540, in update
_count_elements(self, iterable)
File "<stdin>", line 1, in <genexpr>
ValueError: need more than 1 value to unpack
>>> Counter((item[0], item[1]) for item in a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/collections.py", line 460, in __init__
self.update(iterable, **kwds)
File "/usr/lib/python3.2/collections.py", line 540, in update
_count_elements(self, iterable)
File "<stdin>", line 1, in <genexpr>
IndexError: tuple index out of range
>>> Counter((item[0], item[1]) for item in a if len(item) >= 2)
Counter({('309', '308'): 2, ('308', '309'): 1})
는 가변 길이의 수를 가지고해야하는 경우, 가장 쉬운 방법은을 사용하는 것입니다 목록 슬라이스 :
:
물론
start = 0
end = 2
Counter(item[start:end] for item in a if len(item) >= start+end)
, 이것은 단지 개별적으로 열을 선택하려는 경우, 당신은 좀 더 작업을해야 지속적인 실행 작동
def pick(seq, indices):
return tuple([seq[i] for i in indices])
columns = [1, 3]
maximum = max(columns)
Counter(pick(item, columns) for item in a if len(item) > maximum)
마지막 튜플에 네 개의 숫자가 있어야하나요? –
예 .. 내 예와 같이 3보다 많거나 1이 아닌 숫자가 될 수 있습니다. – Learnerbeaver