programing

가증스러운 내용을 세트에 추가하려면 어떻게 해야 합니까?

madecode 2023. 7. 10. 23:45
반응형

가증스러운 내용을 세트에 추가하려면 어떻게 해야 합니까?

기존 항목에 모든 항목을 추가하는 "단 하나의 [...] 명백한 방법"은 무엇입니까?set?

의 요소를 추가할 수 있습니다.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() 함수를 사용하여 반복 가능한 값을 집합으로 변환한 다음 표준 집합 업데이트 연산자(|=)를 사용하여 새 집합의 고유 값을 기존 집합에 추가할 수 있습니다.

>>> 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

목록 이해력을 사용합니다.

예를 들어 목록을 사용하여 반복 가능한 생성 단락:)

>>> 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)

참고로, 저는 "그것을 할 수 있는 분명한 한 가지 방법이 있어야 한다"는 주장은 거짓이라고 생각합니다.그것은 많은 기술적인 마인드를 가진 사람들이 모든 사람들이 비슷하게 생각하는 가정을 만듭니다.한 사람에게는 명백한 것이 다른 사람에게는 그렇게 명백하지 않습니다.

저는 제가 제안한 해결책이 분명하게 읽을 수 있으며, 당신이 요청한 것을 수행한다고 주장하고 싶습니다.저는 그것과 관련된 어떤 성과물도 없다고 생각합니다. 제가 뭔가를 놓쳤을 수도 있다는 것은 인정하지만요.그러나 이 모든 것에도 불구하고, 그것은 분명하지 않고 다른 개발자보다 선호될 수 있습니다.

언급URL : https://stackoverflow.com/questions/4045403/how-do-i-add-the-contents-of-an-iterable-to-a-set

반응형