Tambahkan Variabel ke Tuple

282

Saya belajar Python dan membuat koneksi basis data. Ketika mencoba untuk menambah DB, saya berpikir untuk membuat tuple dari informasi dan kemudian menambahkannya ke DB.

Apa yang saya lakukan : Saya mengambil informasi dari pengguna dan menyimpannya dalam variabel. Bisakah saya menambahkan variabel ini ke dalam tuple? Bisakah Anda membantu saya dengan sintaks?

Juga jika ada cara efisien untuk melakukan ini, silakan bagikan ...

EDIT Let me mengedit pertanyaan ini sedikit ... Aku hanya perlu tupel untuk memasukkan informasi ke dalam DB. Setelah informasi ditambahkan ke DB, haruskah saya menghapus tuple? Maksud saya, saya tidak perlu tuple lagi.

ya
sumber

Jawaban:

371

Tuples tidak berubah; Anda tidak dapat mengubah variabel mana yang dikandungnya setelah konstruksi. Namun, Anda dapat menggabungkan atau mengirisnya untuk membentuk tupel baru:

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

Dan, tentu saja, membangunnya dari nilai-nilai yang ada:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)
John Millikin
sumber
saya hanya perlu tupel ini untuk menambah db setelah input pengguna. jadi haruskah saya merusak tupel ini setelah pembaruan ke db selesai?
Amit
5
Anda tidak perlu merusak tupel setelah memperbarui db. Jika mereka keluar dari ruang lingkup mereka harus mengumpulkan sampah.
Justin Standard
Untuk menambahkan string ke tuple tanpa memutus string itu sendiri, periksa stackoverflow.com/a/16449189
Enzo Ferey
Hanya dengan menambahkan a = (),, dan b= a + (5), mengarah ke b = 5, oleh karena itu b= a + (5,), akan mengarah ke b = (5,); sebuah tuple.
yashgarg1232
222

Anda bisa mulai dengan tuple kosong dengan sesuatu seperti t = (). Anda dapat menambahkan dengan +, tetapi Anda harus menambahkan tuple lain. Jika Anda ingin menambahkan satu elemen, membuat tunggal: t = t + (element,). Anda dapat menambahkan tupel beberapa elemen dengan atau tanpa koma trailing itu.

>>> 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)
Daniel
sumber
20
Dalam contoh kasus ini, kita juga dapat melakukan: t = ()kemudiant += (1,)
Douglas Denhartog
2
Apa untungnya memasukkan koma tertinggal?
Splic
13
Tanda titik diperlukan untuk singleton untuk menghindari kebingungan antara elemen dalam tanda kurung. Tanda kurung digunakan dalam urutan operasi, jadi (7) hanya 7. Tapi (7,) adalah tupel satu elemen di mana elemennya 7. Demikian juga, 3 * (7 + 8) = 45, tetapi 3 * ( 7 + 8,) = (15, 15, 15) - apakah itu masuk akal?
Daniel
2
Adapun tupel multi-elemen, koma tertinggal adalah 100% opsional. Termasuk itu semacam menandakan "ini adalah tuple, saya tahu itu tuple, saya tahu bagaimana tuple bekerja, dan saya tahu saya bisa melakukannya." Tetapi tidak ada koma yang tampak lebih alami. Idk. Terserah kamu.
Daniel
Saya pikir ini penting untuk dicatat bahwa tuple tidak dapat diubah - mereka sebenarnya tidak dapat dimodifikasi. Apa solusi ini lakukan adalah membuat tuple baru berdasarkan dua tupel yang ada .
That1Guy
44

Taktik lain yang belum disebutkan adalah menggunakan menambahkan ke daftar, dan kemudian mengubah daftar menjadi tuple di akhir:

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

kembali

(0, 1, 2, 3, 4)

Saya kadang-kadang menggunakan ini ketika saya harus melewatkan tuple sebagai argumen fungsi, yang sering diperlukan untuk fungsi numpy.

ehontz
sumber
3
Sangat berguna untuk mengetahui bahwa kebalikan dari ini, yaitu list(someTuple)bekerja juga. Kedua tipe objek ini tampaknya dapat dipertukarkan
khaverim
Tidak benar-benar dapat dipertukarkan, saya pikir konversi dari tuple ke daftar akan menyalin semua elemen dalam daftar, jadi pasti ada tempat untuk menghindarinya
gbtimmon
41

Di Python 3, Anda bisa menggunakan *untuk membuat tuple elemen baru dari tuple asli bersama dengan elemen baru.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')
Yang Bo
sumber
2
Sejauh ini yang paling pythonic bagi saya.
Bumsik Kim
6
Ini 10x lebih lambat dari tuple1 + ("baz",).
Mateen Ulhaq
9

"Setelah info ditambahkan ke DB, haruskah saya menghapus tuple? Maksudku, aku tidak perlu tuple lagi."

Tidak.

Secara umum, tidak ada alasan untuk menghapus apa pun. Ada beberapa kasus khusus untuk dihapus, tetapi sangat, sangat jarang.

Cukup tentukan ruang lingkup sempit (yaitu, definisi fungsi atau fungsi metode dalam kelas) dan objek akan menjadi sampah yang dikumpulkan pada akhir ruang lingkup.

Jangan khawatir tentang menghapus apa pun.

[Catatan. Saya bekerja dengan seorang pria yang - selain mencoba menghapus objek - selalu menulis metode "reset" untuk membersihkannya. Seolah dia akan menyelamatkan mereka dan menggunakannya kembali. Juga kesombongan konyol. Abaikan saja objek yang tidak lagi Anda gunakan. Jika Anda mendefinisikan fungsi Anda dalam blok kode yang cukup kecil, Anda tidak perlu memikirkan apa-apa lagi.]

S.Lott
sumber
7

Ini semudah yang berikut ini:

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

Namun, tupel dalam Python tidak dapat diubah , sehingga Anda tidak dapat menambahkan variabel ke tupel setelah dibuat.

mipadi
sumber
3

Seperti yang dicatat oleh jawaban lain, Anda tidak dapat mengubah tupel yang ada, tetapi Anda selalu dapat membuat tupel baru (yang dapat mengambil sebagian atau semua item dari tupel yang ada dan / atau sumber lain).

Misalnya, jika semua item yang diminati berada dalam variabel skalar dan Anda tahu nama-nama variabel tersebut:

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

untuk digunakan, misalnya, seperti dalam contoh ini:

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

tentu saja kasus yang satu ini akan lebih sederhana dinyatakan sebagai (x, y, z)(atau bahkan tidak disebutkan namanya sama sekali (23, 45, 67)), tetapi maketuplependekatan tersebut mungkin berguna dalam beberapa kasus yang lebih rumit (misalnya di mana nama yang akan digunakan juga ditentukan secara dinamis dan ditambahkan ke daftar selama komputasi).

Alex Martelli
sumber
2

Saya cukup yakin sintaks untuk ini dalam python adalah:

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

setelah diatur, tupel tidak dapat diubah.

Jon W
sumber