source

목록에 세트 추가

manycodes 2023. 2. 7. 00:00
반응형

목록에 세트 추가

기존 세트에 값 목록을 추가하려면 어떻게 해야 합니까?

목록 내용 추가

또는 사용|=연산자:

>>> a = set('abc')
>>> a
{'a', 'b', 'c'}

>>> xs = ['d', 'e']
>>> a.update(xs)
>>> a
{'e', 'b', 'c', 'd', 'a'}

>>> xs = ['f', 'g']
>>> a |= set(xs)
>>> a
{'e', 'b', 'f', 'c', 'd', 'g', 'a'}

목록 자체 추가

set 요소는 해시 가능해야 하므로 목록 자체를 세트에 직접 추가할 수 없습니다.

대신 먼저 목록을 태플로 변환할 수 있습니다.

>>> a = {('a', 'b', 'c')}

>>> xs = ['d', 'e']
>>> a.add(tuple(xs))
>>> a
{('a', 'b', 'c'), ('d', 'e')}

목록이 변경 가능하므로 목록에 추가할 수 없습니다. 즉, 목록에 추가한 후 목록의 내용을 변경할 수 있습니다.

그러나 튜플의 내용은 변경할 수 없으므로 세트에 튜플을 추가할 수 있습니다.

>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])

편집: 일부 설명:이 매뉴얼에서는set개별 해시 가능 개체의 순서가 정렬되지 않은 모음으로 표시됩니다.이러한 작업을 수행할 때마다 개별 요소를 확인하는 것보다 요소를 검색, 추가 및 제거할 수 있도록 개체를 해시할 수 있어야 합니다.사용된 특정 알고리즘은 위키피디아 문서에 설명되어 있습니다.비단뱀 해시 알고리즘은 effbot.org과 비단뱀에 설명되어 있습니다.__hash__python 참조의 함수.

몇 가지 사실:

  • 사전 키뿐만 아니라 설정 요소도 해시 가능해야 합니다.
  • 캐시할 수 없는 데이터 유형:
    • list: 사용tuple대신
    • set: 사용frozenset대신
    • dict: 공식적인 대응책은 없지만 몇 가지 레시피가 있습니다.
  • 오브젝트 인스턴스는 기본적으로 해시 가능하며 각 인스턴스는 고유한 해시를 가집니다.python 참조에 설명된 대로 이 동작을 재정의할 수 있습니다.

목록에 있는 요소를 세트에 추가하려면update

https://docs.python.org/2/library/sets.html 에서

s.update(t): t에서 추가된 요소를 포함한 반환 집합

예.

>>> s = set([1, 2])
>>> l = [3, 4]
>>> s.update(l)
>>> s
{1, 2, 3, 4}

대신 전체 목록을 단일 요소로 세트에 추가하려면 목록을 해시할 수 없으므로 추가할 수 없습니다.대신 태플을 추가할 수 있습니다.s.add(tuple(l))자세한 것은, 「TypeError:uncashable type:built-in set 함수를 사용하는 경우의 리스트도 참조해 주세요.

이것이 도움이 되기를 바랍니다.

>>> seta = set('1234')
>>> listb = ['a','b','c']
>>> seta.union(listb)
set(['a', 'c', 'b', '1', '3', '2', '4'])
>>> seta
set(['1', '3', '2', '4'])
>>> seta = seta.union(listb)
>>> seta
set(['a', 'c', 'b', '1', '3', '2', '4'])

기능에 주목해 주세요.set.update()문서에는 다음과 같이 기재되어 있습니다.

그 자체와 다른 조합으로 세트를 업데이트합니다.

목록 개체는 캐시할 수 없습니다.하지만 당신은 그것들을 두 배로 돌려보내는 것이 좋을지도 모릅니다.

집합에는 가변(변경 가능한) 요소/구성원을 포함할 수 없습니다.목록은 가변이므로 집합의 구성원이 될 수 없습니다.

세트는 가변이므로 세트를 가질 수 없습니다!프로젠세트는 세트로 드실 수 있습니다.

(같은 종류의 "상호성 요구"가 dict 키에도 적용됩니다.)

다른 답변은 이미 코드를 알려줬습니다. 이 답변이 약간의 통찰력을 주길 바랍니다.나는 알렉스 마르텔리가 더 자세한 답변을 해주길 바란다.

나는 오늘 비슷한 일을 해야 한다는 것을 알았다.알고리즘은 세트에 추가할 필요가 있는 새 목록을 작성할 때는 알고 있었지만 목록 동작이 언제 완료되었는지 알 수 없었습니다.

어쨌든, 내가 원하는 행동은 세트로 사용할 행동이었다.idhash 알게 mydict[id(mylist)] = mylistmyset.add(mylist)내가 원하는 행동을 할 수 있게 해줬지

목록이 아닌 태플을 추가하는 경우:

>>> a=set('abcde')
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> l=['f','g']
>>> l
['f', 'g']
>>> t = tuple(l)
>>> t
('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])

목록이 있는 경우 위와 같이 태플로 변환할 수 있습니다.태플은 불변하기 때문에 세트에 추가할 수 있습니다.

해시 가능한 튜플을 사용할 수 있습니다(목록처럼 변경 가능한 개체를 해시할 수 없습니다).

>>> a = set("abcde")
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> t = ('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])

저는 보통 이렇게 합니다.

def add_list_to_set(my_list, my_set):
    [my_set.add(each) for each in my_list]
return my_set

도 한번 써보세요.*뭇매를 맞다

>>> a=set('abcde')
>>> a
{'a', 'd', 'e', 'b', 'c'}
>>> l=['f','g']
>>> l
['f', 'g']
>>> {*l, *a}
{'a', 'd', 'e', 'f', 'b', 'g', 'c'}
>>> 

편집자 외 버전:

a=set('abcde')
l=['f', 'g']
print({*l, *a})

출력:

{'a', 'd', 'e', 'f', 'b', 'g', 'c'}

언급URL : https://stackoverflow.com/questions/1306631/add-list-to-set

반응형