2014-04-10 5 views
0

요소가 이미 세트에 존재하는지 확인하거나 어쨌든 add()을 사용해야합니까? 다른 이상 한 가지 방법을 선택하는 장점이Python : 회원 확인 또는 세트로 추가 사용

uniq = set() 
_ = [uniq.add('%s %s' % (k,hn)) for hn in v] 

있습니까 :

그래서 더 나은

uniq = set() 
_ = [uniq.add('%s %s' % (k,hn)) for hn in v if '%s %s' % (k,hn) not in uniq ] 

또는 더 나은 무엇입니까?

+1

부작용으로 목록 이해를 사용하지 마십시오. 'None'으로 가득 찬 목록을 낭비하지 않도록 규칙적인'for' 루프를 사용하거나 직접 세트를 작성하기 위해 집합을 사용하십시오 :'uniq = { '% s % s'hn의 % (k, hn) }}. – user2357112

답변

1

당신이하고있는 일이 가치를 추가하는 것이라면 회원 자격을 시험 할 필요가 없습니다. 추가 작업을하고 있습니다 .add()이미 당신을 위해 않습니다.

부작용에 대한 목록 이해를 사용하지 마십시오. None 개의 전체 목록 개체를 만든 다음 다시 버립니다. 단순한 for 루프는 이해하고 유지하는 것이 훨씬 더 효율적이었습니다. .

이 경우, 당신은 단지 발전기 expresion와 set.update()을 사용, 심지어 루프에서 set.add()를 호출 할 필요가 없습니다 uniq은 아마도 예를 들어 아래로 단순화 기존의 집합입니다

uniq = set() 
uniq.update('%s %s' % (k,hn) for hn in v) 

. 그렇지 않다면 한 줄의 코드를 사용하여 집합 이해를 사용하여 처음부터 세트를 만들 수 있습니다.

uniq = {'%s %s' % (k,hn) for hn in v} 
+0

'update'를 사용한 좋은 점. – LarsVegas