2010-03-05 7 views
6

문자열의 총 중복 수는 어떻게 찾습니까? 즉, j= [1,1,1,2,2,2] 인 경우 4 중복이 발견 되나요? 각 개별 번호가 몇 번 있었는지 보여주는 계산 만 찾을 수있었습니다. 이 연습의 목적을 위해 정말 중요하지 않지만파이썬에서 중복 된 정수 계산하기

답변

17
>>> j= [1,1,1,2,2,2] 
>>> len(j) - len(set(j)) 
4 

및 BTW, j은 목록이 아닌 문자열입니다.

7

이미 대중적인 대답이있는 것처럼 보이지만 개별 복제 카운트도 유지하려면 Python 2.7의 새로운 Counter() 컬렉션 개체가 적합합니다.

>>> from collections import Counter 

>>> j = [1,1,1,2,2,2] 

>>> Counter(j) 
Counter({1: 3, 2: 3}) 

>>> sum([i - 1 for i in c.values() if i > 1]) 
4 

>>> {k: v - 1 for k, v in c.items()} # individual dupes 
{1: 2, 2: 2} 

backport for Counter at ActiveState

+1

제안/관찰있다 : 하나는'C = 카운터 (J)가'이 곳에서 실행됩니다 가정 할 필요가있다. 너는'[]'을 잃을 수있는 파이썬 2.7을 요구한다. 둘째, 'if'절은 중복됩니다. 셋째,'c.values ​​()'리스트를 만들지 않습니다. 결과 :'sum (i - c.itervalues ​​()) i' 또는 일부 대수의 뒤에'sum (c.itervalues ​​()) - len (c)'를 시도하십시오. 예 : 이중 복사를 추가해보십시오. 3을 입력에 연결합니다. 귀하의 개인 독극물 사전이 실제로 의도 한 바를 확인하십시오. HTH. –

+0

OK ... 첫째,'i> 1'이 "중복"이라고 말해주십시오. 음의 정수가 사전에 삽입 될 경우를 대비하여'i <0'을 ​​방지하려면 ** 필요 **합니다. 따라서 비교는 관계없이 발생합니다. 이제 1M 항목의 목록을 생각해 봅시다. 여기서 999,000은 '0'이고 그 다음에는 '0'이 목록에 추가되지 않도록해야합니다. "어떤 대수가 끝난 후에"라는 말은 내가 배워야 할 필요가 있다고 들리는 것처럼 들리지만, 방금 '-1000000'이라는 단어를 쓰고 싶다고 말했듯이, 'Counter')'이 수정합니다. – jonwd7

+0

둘째로, Backport에 대한 링크가 포함되어 있으므로'Counter() '를 사용하여 2.7을 필요로하지 않습니다. (나는 독어 독해력을 사용한다 그러나 그것은 아주 빨리 바뀔 수있다). 따라서 나는 "[]을 잃을 수도, 없을 수도 있습니다."하지만 그게 무슨 상관 이죠? 셋째,'itervalues' /'iteritems'는이 간단한 예에서는 쓸모가 없었고 타이핑하기가 더 힘들어서 용서해주었습니다. 마지막으로 non-dupe 3에 대해 무슨 뜻인지 전혀 모르겠다. ... '..., 3 : 0}'이 출력 될 것이고 OP는 정확히 같을 수도 있고 그렇지 않을 수도있다. 알 * 그 상황에서 일어나고 싶다. 'i> 0' 그럼? – jonwd7