파이썬:(1,2,3)과 [1,2,3]의 차이점은 무엇이며 언제 사용해야 합니까?

StackOverflow https://stackoverflow.com/questions/1983

  •  08-06-2019
  •  | 
  •  

문제

많은 곳에서, (1,2,3) (튜플) 그리고 [1,2,3] (목록)은 같은 의미로 사용될 수 있습니다.

언제 둘 중 하나를 사용해야 하며, 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

로부터 파이썬 FAQ:

리스트와 튜플은 여러 측면에서 유사하지만 일반적으로 근본적으로 다른 방식으로 사용됩니다.튜플은 파스칼 레코드나 C 구조체와 유사하다고 생각할 수 있습니다.이는 그룹으로 운영되는 다양한 유형의 관련 데이터의 작은 모음입니다.예를 들어 데카르트 좌표는 두 개 또는 세 개의 숫자로 구성된 튜플로 적절하게 표현됩니다.

반면에 목록은 다른 언어의 배열과 비슷합니다.이들은 모두 동일한 유형을 갖고 하나씩 작동하는 다양한 수의 객체를 보유하는 경향이 있습니다.

일반적으로 관례적으로 (불)변경 가능성만을 기준으로 목록이나 튜플을 선택하지 않습니다.본격적인 클래스가 너무 무거워지는 완전히 다른 데이터 조각의 작은 컬렉션에는 튜플을 선택하고, 동질적인 데이터 세트가 있는 합리적인 크기의 컬렉션에는 목록을 선택합니다.

다른 팁

목록 [1,2,3] 역동적이고 유연하지만 그 유연성에는 속도 비용이 따릅니다.

튜플 (1,2,3) 고정(불변)이므로 더 빠릅니다.

튜플은 빠르고 유연한 생성 방법입니다. 합성물 데이터 유형.목록은 개체 목록의 컨테이너입니다.

예를 들어 목록을 사용하여 수업의 학생 세부 정보 목록을 저장할 수 있습니다.

해당 목록의 각 학생 세부 정보는 롤 번호, 이름 및 시험 점수를 포함하는 3-튜플일 수 있습니다.

`[(1,'Mark',86),(2,'John',34)...]`

또한 튜플은 불변이기 때문에 딕셔너리의 키로 사용될 수 있습니다.

튜플의 개념은 매우 표현력이 뛰어납니다.

  • 실용적으로 값을 압축하고 압축을 푸는 데 적합합니다(x,y=coord).

  • 사전(해시 테이블)과 함께 사용하면 여러 수준의 연관이 필요한 매핑 형식을 허용합니다.예를 들어 (x,y)를 찾았다고 표시하는 것을 고려해 보세요.

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
    
  • 목록은 해당 내용에 대한 작업을 기대하면서 사용해야 합니다(따라서 불변성에 대한 다양한 언급이 있습니다).목록을 사용하여 팝, 푸시, 스플라이스, 슬라이스, 검색, 이전 삽입, 이후 삽입 등을 원할 것입니다.

  • 튜플은 간단한 비교가 이루어지는 객체의 하위 수준 표현이거나 앞서 제공된 좌표 예제와 같이 예측 가능한 방식으로 n번째 요소 또는 n 요소를 추출하는 등의 작업이어야 합니다.

  • 마지막으로 목록은 해시 가능하지 않으므로 사전(Perl의 해시 테이블, PHP의 연관 배열)을 사용하여 수행되는 매핑 유형은 튜플로 수행되어야 합니다.

    마지막으로 튜플과 딕셔너리를 함께 사용하는 간단한 예는 다음과 같습니다.

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(
    

[1, 2, 3] 항목을 추가하거나 삭제할 수 있는 목록입니다.
(1, 2, 3) 일단 정의되면 수정할 수 없는 튜플입니다.

항목 모음을 함수에 전달해야 할 때마다 함수가 전달된 값을 변경하지 않도록 하려면 튜플을 사용합니다.

그렇지 않고 값을 변경하는 기능을 갖고 싶다면 목록을 사용합니다.

외부 라이브러리를 사용하고 값 목록을 함수에 전달해야 하며 데이터 무결성이 확실하지 않은 경우 항상 튜플을 사용하세요.

다른 사람들이 언급했듯이 목록과 튜플은 모두 Python 개체를 저장하는 데 사용할 수 있는 컨테이너입니다.리스트는 확장 가능하고 그 내용은 할당에 따라 변경될 수 있지만, 튜플은 변경할 수 없습니다.

또한 목록은 사전의 키로 사용할 수 없지만 튜플은 사용할 수 있습니다.

콘솔을 열고 Python을 실행하십시오.이 시도:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

마지막 줄 목록의 마지막 항목을 볼 수 있듯이 다음과 같은 방법이 있습니다.'추가', '계산', '확장', '색인', '삽입', '팝', '제거', '역방향', '정렬'

이제 튜플에 대해서도 동일한 작업을 수행해 보세요.

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

오직 '카운트'와 '인덱스' 목록 메소드에서 여기에 나타납니다.

이는 튜플이 불변이고 어떤 수정도 지원하지 않기 때문입니다.대신 내부 구현이 더 간단하고 빠릅니다.

  • 튜플은 불변이기 때문에 사전의 열쇠를 나타낼 수 있습니다.
  • 임의의 액세스가 필요없는 데이터 모음이있는 경우 목록을 사용하십시오.

튜플과 함께 작동하는 솔루션을 찾을 수 있다면 이를 사용하세요. 불변성을 강제하여 더 기능적인 경로로 안내할 수 있기 때문입니다.기능적/불변의 길을 택한 것을 거의 후회하지 않습니다.

[1,2,3] 목록입니다.

(1,2,3) 튜플이며 변경할 수 없습니다.

(1,2,3)과 [1,2,3]은 드문 경우에 서로 바꿔서 사용할 수 있습니다.

따라서 (1,2,3)은 튜플이며 변경할 수 없습니다.변경하려는 내용은 개체를 덮어써야 합니다.

[1,2,3]은 목록이며 요소를 추가하고 제거할 수 있습니다.

목록에는 튜플보다 더 많은 기능이 있습니다.

(1,2,3) 는 튜플입니다 [1,2,3] 목록입니다.튜플은 불변 객체이지만 리스트는 가변입니다.

(1,2,3) 튜플이고 [1,2,3] 목록입니다.둘 중 하나는 일련의 숫자를 나타내지만 튜플은 변경할 수 없고 목록은 변경 가능한 Python 객체라는 점에 유의하세요.

(1,2,3) -Tuple [1,2,3]-목록 목록은 다양한 작업을 수행 할 수있는 경우 변동성이 있으며 튜플은 불변 할 수 없으며 확장 할 수 없습니다. 그것은 만들어졌습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top