development

각각을 사용할 때 목록 대 튜플?

big-blog 2020. 2. 20. 23:29
반응형

각각을 사용할 때 목록 대 튜플? [복제]


이 질문에는 이미 답변이 있습니다.

파이썬에서는 언제리스트를 사용해야하고 언제 튜플을 사용해야합니까?

때로는 선택의 여지가없는 경우가 있습니다 (예 :

"hello %s you are %s years old" % x

x는 튜플이어야합니다.

그러나 API를 디자인하고 데이터 유형을 선택하는 사람이라면 지침은 무엇입니까?


structC에서 사용하는 것과 비슷한 이종 컬렉션에 대한 강력한 튜플 문화가 있으며 배열을 사용하는 것과 유사한 동종 컬렉션에 대한 목록이 있습니다. 그러나 나는 다른 답변에서 언급 한 변경 가능성 문제로 이것을 제곱 한 적이 없습니다. 동질성이 강요되지 않아서 훨씬 덜 흥미로운 구별 인 것처럼 보인다.


튜플 은 본질적으로 크기가 고정되어 있지만 목록 은 동적입니다.
즉, a tuple불변 인 반면 a list변할 수 있습니다.

  1. 튜플에는 요소를 추가 할 수 없습니다. 튜플에는 추가 또는 확장 방법이 없습니다.
  2. 튜플에서 요소를 제거 할 수 없습니다. 튜플에는 제거 또는 팝 방법이 없습니다.
  3. 튜플을 변경하지 않으므로 튜플에서 요소를 찾을 수 있습니다.
  4. in연산자를 사용 하여 튜플에 요소가 있는지 확인할 수도 있습니다 .

  • 튜플은 목록보다 빠릅니다. 상수 값 세트를 정의하고 있고 그와 관련된 모든 작업이 반복되는 경우 목록 대신 튜플을 사용하십시오.

  • 변경할 필요가없는 데이터를 "쓰기 방지"하면 코드가 더 안전 해집니다. 리스트 대신 튜플을 사용하는 것은이 데이터가 일정하고이를 무시하기 위해 특별한 생각 (및 특정 기능)이 필요하다는 암시 적 진술을 갖는 것과 같습니다.

  • 일부 튜플은 사전 키 (특히 문자열, 숫자 및 기타 튜플과 같은 변경 불가능한 값을 포함하는 튜플)로 사용할 수 있습니다. 목록은 변경할 수 없으므로 사전 키로 사용할 수 없습니다.

출처 : Python 3으로 뛰어 들기


주요 차이점은 튜플은 변경할 수 없으며 (할당 후에 변경할 수 없음) 목록은 변경할 수 있다는 것입니다 (추가, 변경, 빼기 등) ).

따라서 할당 후 변경해서는 안되는 튜플과 할 수있는 것을 나열하는 경향이 있습니다.


변경 가능해야합니까? 목록을 사용하십시오. 변경할 수 없어야합니까? 튜플을 사용하십시오.

그렇지 않으면 선택의 문제입니다.

이기종 객체 (이름, 거리, 도시, 주 및 우편 번호로 구분 된 주소)의 수집에는 튜플을 사용하는 것이 좋습니다. 그것들은 항상 명명 된 튜플 로 쉽게 승격 될 수 있습니다 .

마찬가지로 컬렉션을 반복하려면 목록을 선호합니다. 여러 객체를 하나로 묶는 컨테이너라면 튜플을 선호합니다.


가장 먼저 결정해야 할 것은 데이터 구조를 변경해야하는지 여부입니다. 언급했듯이 목록은 변경 가능하고 튜플은 변경되지 않습니다. 이는 또한 튜플을 사전 키에 사용할 수 있으며 목록이없는 튜플을 사용할 수 있음을 의미합니다.

내 경험상, 튜플은 일반적으로 순서와 위치가 의미 있고 일관된 곳에 사용됩니다. 예를 들어, 자신 만의 모험 게임을 선택하기위한 데이터 구조를 만들 때 튜플의 위치가 의미가 있었기 때문에 목록 대신 튜플을 사용하기로했습니다. 해당 데이터 구조의 한 가지 예는 다음과 같습니다.

pages = {'foyer': {'text' : "some text", 
          'choices' : [('open the door', 'rainbow'),
                     ('go left into the kitchen', 'bottomless pit'),
                     ('stay put','foyer2')]},}

튜플의 첫 번째 위치는 사용자가 게임을 할 때 표시되는 선택 사항이며 두 번째 위치는 선택하는 페이지의 핵심이며 모든 페이지에서 동일합니다.

튜플은 목록보다 메모리 효율성이 뛰어나지 만 그 이점이 언제 분명해 졌는지 잘 모르겠습니다.

Think Python의 목록과 튜플에 대한 장도 확인 하십시오 .


그러나 API를 디자인하고 데이터 유형을 선택하는 사람이라면 지침은 무엇입니까?

입력 매개 변수의 경우 필요한 작업을 수행하는 가장 일반적인 인터페이스를 사용하는 것이 가장 좋습니다. 튜플이나 목록은 거의 없으며, 시퀀스, 슬라이스 또는 반복 가능한 경우가 더 많습니다. 파이썬의 오리 타이핑은 입력 유형을 명시 적으로 확인하지 않는 한 일반적으로 무료로 제공됩니다. 피할 수없는 경우가 아니면 그렇게하지 마십시오.

생성하는 데이터 (출력 매개 변수)의 경우 가장 편리한 것을 반환합니다. 예를 들어 유지하는 데이터 유형이나 도우미 함수가 반환하는 모든 것을 반환합니다.

명심해야 할 것은 상태의 일부인 목록 (또는 다른 변경 가능)을 반환하지 않는 것입니다.

class ThingsKeeper
    def __init__(self):
        self.__things = []

    def things(self):
        return self.__things  #outside objects can now modify your state

    def safer(self):
        return self.__things[:]  #it's copy-on-write, shouldn't hurt performance

튜플에 비해 목록의 경미하지만 눈에 띄는 이점은 목록이 약간 더 이식성이 좋은 경향이 있다는 것입니다. 표준 도구는 튜플을 지원할 가능성이 적습니다. 예를 들어 JSON에는 튜플 유형이 없습니다. YAML 은하지만 구문은 목록 구문과 비교하기가 쉽지 않습니다.

이러한 경우 내부에서 튜플을 사용하고 내보내기 프로세스의 일부로 목록으로 변환 할 수 있습니다. 또는 일관성을 위해 어디에서나 목록을 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/1708510/list-vs-tuple-when-to-use-each



반응형