튜플에 변수 추가


282

파이썬을 배우고 데이터베이스 연결을 만들고 있습니다. DB에 추가하려고 할 때 정보에서 튜플을 만든 다음 DB에 추가하려고합니다.

내가하고있는 일 : 사용자로부터 정보를 가져 와서 변수에 저장합니다. 이 변수들을 터플에 추가 할 수 있습니까? 구문을 알려주세요.

또한이 작업을 수행하는 효율적인 방법이 있다면 공유하십시오 ...

편집이 질문을 조금 편집 하겠습니다 ... DB에 정보를 입력하려면 튜플 만 있으면됩니다. 정보가 DB에 추가되면 튜플을 삭제해야합니까? 더 이상 튜플이 필요하지 않습니다.

답변:


371

튜플은 불변입니다. 생성 후 변수가 포함 된 변수는 변경할 수 없습니다. 그러나, 그것들을 연결하거나 슬라이스하여 새로운 튜플을 형성 할 수 있습니다 :

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

그리고 물론, 기존의 가치로부터 그것들을 구축하십시오 :

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

사용자 입력 후 db에 추가하기 위해 이러한 튜플 만 필요합니다. DB 업데이트가 완료된 후이 튜플을 제거해야합니까?
amit

5
db를 업데이트 한 후 튜플을 제거 할 필요가 없습니다. 범위를 벗어나면 가비지 수집되어야합니다.
저스틴 표준

문자열 자체를 깨지 않고 튜플에 문자열을 추가하려면 stackoverflow.com/a/16449189
Enzo Ferey

에, a = ()및 을 추가 b= a + (5)하면 b = 5가되고 b= a + (5,),는 b = (5,); 튜플.
yashgarg1232

222

다음과 같은 빈 튜플로 시작할 수 있습니다 t = (). 로 추가 할 수 +있지만 다른 튜플을 추가해야합니다. 단일 요소를 추가하려면 단일 요소로 만드십시오 t = t + (element,). 후행 쉼표가 있거나없는 여러 요소의 튜플을 추가 할 수 있습니다.

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)

20
이 사례의 경우 t = ()다음 과 같이 할 수도 있습니다. thent += (1,)
Douglas Denhartog

2
후행 쉼표를 포함하면 어떤 이점이 있습니까?
Splic

13
괄호 안의 요소 사이의 혼동을 피하기 위해 싱글 톤에 필요한 후행 쉼표. 일반 괄호는 연산 순서대로 사용되므로 (7)은 7입니다. 그러나 (7,)은 요소가 7 인 단일 요소 튜플입니다. 마찬가지로 3 * (7 + 8) = 45이지만 3 * ( 7 + 8,) = (15, 15, 15)-말이 되나요?
Daniel

2
다중 요소 튜플의 경우 후미 쉼표는 100 % 선택적입니다. "이것은 튜플이고, 튜플이라는 것을 알고, 튜플의 작동 방식을 알고 있으며, 내가 할 수 있다는 것을 알고 있습니다." 그러나 콤마가 더 자연스럽게 보이지 않을 수 있습니다. Idk. 당신에게 달려 있습니다.
Daniel

나는 튜플이 불변이라는 것을 주목하는 것이 중요하다고 생각합니다. 실제로는 수정할 수 없습니다. 이 솔루션은 기존의튜플을 기반으로 새 튜플을 생성합니다 .
That1Guy

44

아직 언급되지 않은 또 다른 전술은 목록에 추가하고 목록을 튜플로 변환하는 것입니다.

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

보고

(0, 1, 2, 3, 4)

때로는 튜플을 함수 인수로 전달해야 할 때 이것을 사용합니다.이 함수는 종종 numpy 함수에 필요합니다.


3
이것의 반대, 즉 list(someTuple)작동 한다는 것을 아는 것이 유용합니다 . 두 개체 유형은 분명히 교환 할 수 있습니다
khaverim

튜플에서리스트로의 변환은리스트의 모든 요소를 ​​복사 할 것이기 때문에 피할 수있는 장소가 있습니다
gbtimmon 11/13/16

41

Python 3에서는 *원래 튜플에서 새 요소와 함께 새 튜플 요소를 만드는 데 사용할 수 있습니다 .

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
이것은 지금까지 나에게 가장 파이썬적인 것입니다.
김범식

6
이다 10 배 느린 것보다 tuple1 + ("baz",).
Mateen Ulhaq

9

"정보가 DB에 추가되면 튜플을 삭제해야합니까? 더 이상 튜플이 필요하지 않습니다."

아니.

일반적으로 아무것도 삭제할 이유가 없습니다. 삭제에 대한 특별한 경우가 있지만 매우 드 rare니다.

좁은 범위 (즉, 클래스의 함수 정의 또는 메서드 함수)를 정의하기 만하면 개체가 범위의 끝에서 가비지 수집됩니다.

아무것도 삭제하는 것에 대해 걱정하지 마십시오.

[노트. 나는 객체를 삭제하는 것 외에도 항상 "재설정"방법을 사용하여 지우는 사람과 함께 일했습니다. 그가 그들을 저장하고 재사용하려고했던 것처럼. 또한 어리석은 자존심. 더 이상 사용하지 않는 개체는 무시하십시오. 충분히 작은 코드 블록으로 함수를 정의하면 더 이상 생각할 것이 없습니다.]


7

다음과 같이 쉽습니다.

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

그러나 Python의 튜플은 변경할 수 없으므로 튜플이 만들어지면 변수를 추가 할 수 없습니다.


3

다른 답변에서 언급했듯이 기존 튜플을 변경할 수는 없지만 항상 새 튜플을 만들 수 있습니다 (기존 튜플 및 / 또는 다른 소스에서 일부 또는 모든 항목을 가져올 수 있음).

예를 들어, 관심있는 모든 항목이 스칼라 변수에 있고 해당 변수의 이름을 알고있는 경우 :

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

예를 들어이 예에서와 같이 사용됩니다.

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

물론이 경우는보다 단순하게 표현 될 수 있지만 (x, y, z)(또는 앞서 언급 한 이름까지도 (23, 45, 67)) maketuple접근 방식은 좀 더 복잡한 경우에 유용 할 수 있습니다 (예 : 사용할 이름도 동적으로 결정되어 목록에 추가되는 경우). 계산).


2

파이썬에서 이것에 대한 문법은 다음과 같습니다.

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

일단 설정되면 튜플을 변경할 수 없습니다.

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