เพิ่มตัวแปรให้กับ Tuple


282

ฉันกำลังเรียนรู้ Python และสร้างการเชื่อมต่อฐานข้อมูล ในขณะที่พยายามเพิ่มลงในฐานข้อมูลฉันกำลังคิดที่จะสร้างสิ่งอันดับจากข้อมูลแล้วเพิ่มลงในฐานข้อมูล

ฉันกำลังทำอะไร : ฉันกำลังรับข้อมูลจากผู้ใช้และเก็บไว้ในตัวแปร ฉันสามารถเพิ่มตัวแปรเหล่านี้ลงในสิ่งอันดับได้หรือไม่? คุณช่วยฉันด้วยไวยากรณ์ได้ไหม

หากมีวิธีที่มีประสิทธิภาพในการทำเช่นนี้โปรดแชร์ ...

แก้ไข ให้ฉันแก้ไขคำถามนี้หน่อย ... ฉันต้องการเพียง tuple เพื่อป้อนข้อมูลลงในฐานข้อมูล เมื่อเพิ่มข้อมูลลงในฐานข้อมูลแล้วฉันควรลบสิ่งอันดับ ฉันหมายความว่าฉันไม่ต้องการสิ่งอันดับอีกต่อไป

คำตอบ:


371

ทูเปิลนั้นไม่เปลี่ยนรูป คุณไม่สามารถเปลี่ยนตัวแปรที่มีหลังจากการก่อสร้าง อย่างไรก็ตามคุณสามารถต่อหรือแบ่งให้เป็นรูปแบบ tuples ใหม่:

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)

ฉันต้องการ tuples เหล่านี้เพื่อเพิ่มไปยัง db หลังจากอินพุตของผู้ใช้ ดังนั้นฉันควรทำลายสิ่งอันดับเหล่านี้หลังจากการอัพเดตเป็น db เสร็จสมบูรณ์หรือไม่
amit

5
คุณไม่จำเป็นต้องทำลายสิ่งอันดับหลังจากอัปเดต db หากพวกเขาออกนอกขอบเขตพวกเขาควรจะเก็บขยะ
จัสตินมาตรฐาน

หากต้องการเพิ่มสตริงลงใน tuple โดยไม่ทำลายสตริงให้ตรวจสอบstackoverflow.com/a/16449189
Enzo Ferey

เพียงเพิ่มa = ()และb= a + (5)นำไปสู่ ​​b = 5 ดังนั้นb= a + (5,)จะนำไปสู่b = (5,); สิ่งอันดับ
yashgarg1232

222

คุณสามารถเริ่มต้นด้วย tuple t = ()ว่างเปล่ากับสิ่งที่ต้องการ คุณสามารถเพิ่มด้วย+แต่คุณจะต้องเพิ่มอีก tuple t = t + (element,)หากคุณต้องการที่จะเพิ่มองค์ประกอบเดียวทำให้มันเป็นเดี่ยว: คุณสามารถเพิ่ม tuple ของหลาย ๆ องค์ประกอบโดยมีหรือไม่มีจุลภาคต่อท้ายนั้น

>>> 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 = ()นั้นได้t += (1,)
Douglas Denhartog

2
การรวมเครื่องหมายจุลภาคต่อท้ายมีประโยชน์อะไรบ้าง
Splic

13
เครื่องหมายจุลภาคต่อท้ายที่จำเป็นสำหรับซิงเกิลตันเพื่อหลีกเลี่ยงความสับสนระหว่างองค์ประกอบในวงเล็บ ใช้วงเล็บธรรมดาในลำดับของการดำเนินการดังนั้น (7) เพียง 7 แต่ (7,) เป็น tuple แบบองค์ประกอบเดียวที่องค์ประกอบคือ 7 เช่นเดียวกัน 3 * (7 + 8) = 45 แต่ 3 * (( 7 + 8,) = (15, 15, 15) - นั่นสมเหตุสมผลไหม
แดเนียล

2
สำหรับ tuples แบบหลายองค์ประกอบจุลภาคต่อท้ายเป็นตัวเลือก 100% รวมถึงมันมีความหมายว่า "นี่คือสิ่งอันดับฉันรู้ว่ามันเป็นสิ่งอันดับฉันรู้ว่าสิ่งอันดับทำงานอย่างไรและฉันรู้ว่าฉันสามารถทำได้" แต่ไม่มีเครื่องหมายจุลภาคอาจดูเป็นธรรมชาติมากขึ้น idk แล้วแต่คุณ.
Daniel

ฉันคิดว่ามันสำคัญที่จะต้องทราบว่า tuples นั้นไม่เปลี่ยนรูป - ไม่สามารถแก้ไขได้จริง สิ่งที่โซลูชันนี้ทำคือสร้างสิ่งอันดับใหม่ขึ้นอยู่กับสิ่งอันดับสองที่มีอยู่
That1Guy

44

ชั้นเชิงอื่น ๆ ที่ยังไม่ได้กล่าวถึงคือการใช้การต่อท้ายรายการแล้วแปลงรายการเป็น tuple ในตอนท้าย:

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

ผลตอบแทน

(0, 1, 2, 3, 4)

บางครั้งฉันใช้สิ่งนี้เมื่อฉันต้องส่งผ่าน tuple เป็นอาร์กิวเมนต์ของฟังก์ชันซึ่งมักจำเป็นสำหรับฟังก์ชัน numpy


3
มันมีประโยชน์ที่จะรู้ว่าการย้อนกลับของสิ่งนี้คือlist(someTuple)ทำงานได้ดีเช่นกัน เห็นได้ชัดว่าวัตถุทั้งสองชนิดสามารถใช้แทนกันได้
khaverim

ไม่สามารถใช้แทนกันได้ฉันคิดว่าการแปลงจาก tuple เป็น list จะเป็นการคัดลอกองค์ประกอบทั้งหมดในรายการดังนั้นจึงมีสถานที่ที่แน่นอนที่จะหลีกเลี่ยงมัน
gbtimmon

41

ใน Python 3 คุณสามารถใช้*เพื่อสร้างองค์ประกอบใหม่จาก tuple ดั้งเดิมพร้อมกับองค์ประกอบใหม่

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

2
นี่เป็นเสียงไพเราะที่สุดของฉัน
Bumsik Kim

6
นี่คือ10x ช้าtuple1 + ("baz",)กว่า
Mateen Ulhaq

9

"เมื่อเพิ่มข้อมูลลงในฐานข้อมูลแล้วฉันควรลบ tuple หรือไม่ฉันหมายความว่าฉันไม่ต้องการใช้ tuple อีกต่อไป"

เลขที่

โดยทั่วไปไม่มีเหตุผลที่จะลบอะไรเลย มีกรณีพิเศษบางอย่างสำหรับการลบ แต่มันหายากมาก

เพียงกำหนดขอบเขตแคบ ๆ (เช่นนิยามฟังก์ชันหรือฟังก์ชันเมธอดในคลาส) และวัตถุจะถูกรวบรวมขยะที่ท้ายขอบเขต

ไม่ต้องกังวลกับการลบอะไรเลย

[บันทึก. ฉันทำงานกับผู้ชายคนหนึ่งซึ่งนอกเหนือจากการพยายามลบวัตถุ - มักจะเขียนวิธีการ "รีเซ็ต" เพื่อล้างมันออก เหมือนที่เขากำลังจะช่วยพวกเขาและนำพวกเขากลับมาใช้ นอกจากนี้ยังมีความคิดที่โง่ เพียงเพิกเฉยวัตถุที่คุณไม่ได้ใช้อีกต่อไป หากคุณกำหนดฟังก์ชั่นของคุณในบล็อกเล็ก ๆ คุณไม่มีอะไรต้องคิดอีกแล้ว]


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")

อย่างไรก็ตาม tuples ใน Python ไม่สามารถเปลี่ยนได้ดังนั้นคุณไม่สามารถผนวกตัวแปรเข้ากับ tuple ได้เมื่อสร้างขึ้นแล้ว


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.