튜플에 값을 추가하는 방법?


80

나는 같은 튜플 목록이있는 스크립트를 작성 중 ('1','2','3','4')입니다. 예 :

list = [('1','2','3','4'),
        ('2','3','4','5'),
        ('3','4','5','6'),
        ('4','5','6','7')]

지금은 추가 할 필요가 '1234', '2345', '3456''4567'각 튜플의 끝에서 각각. 예 :

list = [('1','2','3','4','1234'),
        ('2','3','4','5','2345'),
        ('3','4','5','6','3456'),
        ('4','5','6','7','4567')]

어떤 식 으로든 가능합니까?


8
다국어 솔루션? ;)
Snowbear

2
StackOverflow에 오신 것을 환영합니다! 질문을 할 때 오른쪽에 편리한 포맷 방법 상자가 있습니다. 질문 영역 바로 위의 [?] 에서 링크 된 페이지와 마찬가지로 읽을만한 가치가 있습니다.
TJ Crowder

3
적어도 파이썬에서는 튜플은 불변입니다. "튜플에 무언가를 추가"하려면 처음부터 변경 가능한 데이터 구조를 사용하지 않는 이유는 무엇입니까?
Felix Kling

2
저도 그렇게합니다. "파일의 파일 용"이 너무 자연 스럽기 때문에 대부분 "파일"을 사용합니다! -그러나 일반적으로 내장 된 "목록"을 대체하는 "목록"이라고 부르는 것을 피해야합니다.
DSM

답변:


138

튜플은 불변이며 변경되어서는 안됩니다. 이것이 바로 목록 유형입니다. 각 튜플을로 대체 originalTuple + (newElement,)하여 새 튜플을 만들 수 있습니다. 예를 들면 :

t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)

그러나 항목을 삽입하는 것이 더 빠르기 때문에 처음부터 목록을 사용하는 것이 좋습니다.

또 다른 힌트 : list프로그램에 내장 된 이름 을 덮어 쓰지 말고 변수 l나 다른 이름을 호출하십시오 . 기본 제공 이름을 덮어 쓰면 현재 범위에서 더 이상 사용할 수 없습니다.


23
속기t += 1,

1
그러나, 저는 sqlite3데이터베이스 에 값을 반복적으로 추가하고 추가 할 값 의 튜플을 만들어야하는 불행한 상황 에 있습니다 (필수 구문은 VALUES (v1, v2, v3, ...).이 경우에는 값을 튜플은 매우 유용합니다.
HS-성운

16

구문에 따르면 이것이 Python이라고 생각합니다. 튜플의 요점은 불변이기 때문에 각 요소를 새 튜플으로 교체해야한다는 것입니다.

list = [l + (''.join(l),) for l in list]
# output:
[('1', '2', '3', '4', '1234'), 
 ('2', '3', '4', '5', '2345'), 
 ('3', '4', '5', '6', '3456'), 
 ('4', '5', '6', '7', '4567')]

5
이것은 확실히 작동합니다. 그러나 이것이 정말로 이루어져야 하는가? 궁금합니다. 이것은 처음에 튜플을 갖는 목적을 무효화하기 때문입니다. 아니면 내가 틀렸나 요?
user225312

9

파이썬에서는 할 수 없습니다. 튜플은 변경할 수 없습니다.

포함 목록에서 튜플 ('1', '2', '3', '4')을 다른 ('1', '2', '3', '4', '1234')튜플으로 바꿀 수 있습니다.


9

다른 답변에서 언급했듯이 튜플은 일단 생성되면 변경할 수 없으며 목록이 더 나은 목적을 제공 할 수 있습니다.

즉, 추가 항목으로 새 튜플을 만드는 또 다른 옵션은 splat 연산자를 사용하는 것입니다.

new_tuple = (*old_tuple, 'new', 'items')

나는이 구문이 새로운 튜플처럼 보이기 때문에 당신이하려는 일을 명확하게 전달 하기 때문에 좋아합니다.

splat을 사용하는 잠재적 솔루션은 다음과 같습니다.

list = [(*i, ''.join(i)) for i in list]


7

다른 사람들이 대답했듯이 파이썬의 튜플은 불변이며 하나를 '수정'하는 유일한 방법은 추가 된 요소가 포함 된 새 튜플을 만드는 것입니다.

그러나 가장 좋은 해결책은 목록입니다. 튜플이 필요한 함수 나 메서드를 호출해야 할 때 tuple (list)를 사용하여 튜플을 만듭니다.


4

tuple및 관련 세부 정보를 list살펴 보았으며 이해 한 내용은 다음과 같습니다.

  • 튜플은 Heterogeneous컬렉션 데이터 유형입니다.
  • 튜플의 길이고정되어 있습니다 (튜플 유형 당)
  • 튜플은 항상 유한합니다.

따라서 새 항목을 튜플에 추가하려면으로 캐스팅하고 작업을 list수행 append()한 다음 다시 튜플로 캐스팅해야합니다.

하지만이 질문에 대해 생각 개인적으로 무엇을, 경우 튜플이 있어야하는 유한 , 고정 길이 항목과 우리가 우리의 응용 프로그램 로직에 그 데이터 형식을 사용하는 경우 다음이해야 하지 새 항목을 추가하거나 항목의 값을 업데이트하는 시나리오가 될 그것. 따라서 튜플 목록 대신 목록 자체 의 목록 이어야합니다. 내가 맞습니까?


1
SQL (psycopg2) 또는 R과 상호 작용 (rpy2)과 같이 함수에 튜플을 전달해야하는 시나리오가 있습니다. 튜플 대신 목록이 주어지면 함수가 항상 제대로 작동하는 것은 아닙니다. 때로는 목록이 아닌 함수에서 튜플을 수신하기도합니다. 튜플은 목록의 복사본에서 작업해야 할 때 원래 목록을 실수로 수정하는 것을 방지 할 수 있습니다. 예, 직접 또는 간접적으로 목록은 제시된 답변의 중개자입니다. 그러나 마지막에 튜플로 다시 캐스팅하는 것은 많은 시나리오에서 여전히 논리적입니다.
Nate Wanner

2
    list_of_tuples = [('1', '2', '3', '4'),
                      ('2', '3', '4', '5'),
                      ('3', '4', '5', '6'),
                      ('4', '5', '6', '7')]


    def mod_tuples(list_of_tuples):
        for i in range(0, len(list_of_tuples)):
            addition = ''
            for x in list_of_tuples[i]:
                addition = addition + x
            list_of_tuples[i] = list_of_tuples[i] + (addition,)
        return list_of_tuples

    # check: 
    print mod_tuples(list_of_tuples)

0
OUTPUTS = []
for number in range(len(list_of_tuples))):
    tup_ = list_of_tuples[number]
    list_ = list(tup_)  
    item_ = list_[0] + list_[1] + list_[2] + list_[3]
    list_.append(item_)
    OUTPUTS.append(tuple(list_))

출력은 당신이 원하는 것입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.