iterable의 모든 항목을 기존에 추가 하는 “하나의 […] 명백한 방법” 은 set
무엇입니까?
답변
a의 요소 list
를 다음 set
과 같이 추가 할 수 있습니다 .
>>> foo = set(range(0, 4))
>>> foo
set([0, 1, 2, 3])
>>> foo.update(range(2, 6))
>>> foo
set([0, 1, 2, 3, 4, 5])
답변
예를 들어 aset.add()
루프를 수행 aset.update()
하면 성능이 경쟁사와 경쟁 할 수 있다고 믿는 사람의 이익을 위해 공개하기 전에 신념을 빠르게 테스트 할 수있는 방법의 예는 다음과 같습니다.
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 294 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 950 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 458 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 598 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 1.89 msec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 891 usec per loop
루프 접근 방식의 항목 당 비용이 접근 방식의 3 배 이상인 것 같습니다 update
.
루프에서 각 개별 항목을 추가하는 것의 절반에 |= set()
비해 약 1.5 배의 비용이 사용 update
됩니다.
답변
set () 함수를 사용하여 iterable을 세트로 변환 한 다음 표준 세트 업데이트 연산자 (| =)를 사용하여 새 세트의 고유 값을 기존 세트에 추가 할 수 있습니다.
>>> a = { 1, 2, 3 }
>>> b = ( 3, 4, 5 )
>>> a |= set(b)
>>> a
set([1, 2, 3, 4, 5])
답변
간단한 업데이트, 파이썬 3을 사용한 타이밍 :
#!/usr/local/bin python3
from timeit import Timer
a = set(range(1, 100000))
b = list(range(50000, 150000))
def one_by_one(s, l):
for i in l:
s.add(i)
def cast_to_list_and_back(s, l):
s = set(list(s) + l)
def update_set(s,l):
s.update(l)
결과는 다음과 같습니다
one_by_one 10.184448844986036
cast_to_list_and_back 7.969255169969983
update_set 2.212590195937082
답변
목록 이해력을 사용하십시오.
예를 들어 목록을 사용하여 iterable 작성을 단락
>>> x = [1, 2, 3, 4]
>>>
>>> k = x.__iter__()
>>> k
<listiterator object at 0x100517490>
>>> l = [y for y in k]
>>> l
[1, 2, 3, 4]
>>>
>>> z = Set([1,2])
>>> z.update(l)
>>> z
set([1, 2, 3, 4])
>>>
[편집 : 질문의 정해진 부분을 놓쳤다]
답변
for item in items:
extant_set.add(item)
기록을 위해, 나는 “한 가지 분명한 방법이 있어야한다”고 주장한다. 가짜입니다. 그것은 많은 기술적 인 생각을 가진 사람들이 만들고 모든 사람이 똑같이 생각한다고 가정합니다. 한 사람에게 분명한 것은 다른 사람에게는 분명하지 않습니다.
제안 된 솔루션을 명확하게 읽을 수 있으며 요청한 내용을 수행한다고 주장합니다. 성능 저하가 있다고 생각하지는 않지만 뭔가 빠졌을 수도 있습니다. 그러나이 모든 것에도 불구하고 다른 개발자에게는 분명하지 않고 바람직하지 않을 수 있습니다.