파이썬은 튜플에 항목을 추가합니다


160

사용자 세션에 튜플로 저장하려고하는 object.ID가 있습니다. 첫 번째를 추가하면 작동하지만 튜플처럼 보이지만 오류가 발생 (u'2',)하여 새 것을 추가하려고하면 .mytuple = mytuple + new.idcan only concatenate tuple (not "unicode") to tuple

답변:


294

두 번째 요소를 1- 튜플로 만들어야합니다. 예 :

a = ('2',)
b = 'z'
new = a + (b,)

11
이 쉼표가 필요한 이유
SIslam

32
@SIslam 쉼표가 없으면 일반적으로 우선 순위를 정하는 데 사용되는 괄호로 해석됩니다.(a+b)*c
Joseph Young

2
예,하지만 new = a + b대신에 할 수 있습니다 new = a + (b,). AFAICT는 python3 및 python2.7에서 동일하게 작동합니다.
ILMostro_7 2018 년

5
@ ILMostro_7은 b가 무엇인지에 달려 있습니다
Jon Clements

또는 a += ('z',)
간단히

54

Python 3.5 ( PEP 448 ) 부터 튜플, 목록 세트 및 dict 내에서 압축을 풀 수 있습니다.

a = ('2',)
b = 'z'
new = (*a, b)

33

튜플에서 목록으로 튜플로 :

a = ('2',)
b = 'b'

l = list(a)
l.append(b)

tuple(l)

또는 추가 할 항목 목록이 더 길면

a = ('2',)
items = ['o', 'k', 'd', 'o']

l = list(a)

for x in items:
    l.append(x)

print tuple(l)

너에게 준다

>>> 
('2', 'o', 'k', 'd', 'o')

요점은 다음과 같습니다. List는 변경 가능한 시퀀스 유형입니다. 따라서 요소를 추가하거나 제거하여 주어진 목록을 변경할 수 있습니다. 튜플은 불변 시퀀스 유형입니다. 튜플은 변경할 수 없습니다. 따라서 새로운 것을 만들어야합니다 .


5
이것은 단지 두 개의 튜플을 추가하는 것보다 두 배 느릴 것입니다
jamylak

2
그러나 OP를 참고 list하여 처음 에 변환하고 항목을 추가 한 다음 마지막으로 변환하면 tuple이것이 가장 좋은 해결책입니다.
jamylak

첫 번째 itemin 목록을 포함하여 두 개의 항목 그러나 당신 말이 맞습니다. 더 긴 = 예제를 추가해야합니다. 편집 내용을 참조하십시오
kiriloff

13

튜플은 추가 만 허용 할 수 있습니다 tuple. 가장 좋은 방법은 다음과 같습니다.

mytuple =(u'2',)
mytuple +=(new.id,)

아래 데이터를 사용하여 동일한 시나리오를 시도했지만 모두 제대로 작동하는 것 같습니다.

>>> mytuple = (u'2',)
>>> mytuple += ('example text',)
>>> print mytuple
(u'2','example text')

11
>>> x = (u'2',)
>>> x += u"random string"

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    x += u"random string"
TypeError: can only concatenate tuple (not "unicode") to tuple
>>> x += (u"random string", )  # concatenate a one-tuple instead
>>> x
(u'2', u'random string')

2

# 1 형태

a = ('x', 'y')
b = a + ('z',)
print(b)

# 2 형태

a = ('x', 'y')
b = a + tuple('b')
print(b)

두 번째 옵션이 작동하지 않습니다. TypeError: 'int' object is not iterable
Obi Wan-PallavJha

1

결론적으로, 튜플에 추가하는 가장 쉬운 방법은 괄호와 쉼표로 추가되는 요소를 묶는 것입니다.

t = ('a', 4, 'string')
t = t + (5.0,)
print(t)

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