Aggiungi variabili a Tupla


282

Sto imparando Python e creando una connessione al database. Durante il tentativo di aggiungere al DB, sto pensando di creare tuple dalle informazioni e quindi aggiungerle al DB.

Cosa sto facendo : sto prendendo le informazioni dall'utente e le memorizzo in variabili. Posso aggiungere queste variabili in una tupla? Potete per favore aiutarmi con la sintassi?

Inoltre, se esiste un modo efficace per farlo, condividi ...

EDIT Lasciami modificare un po 'questa domanda ... Ho solo bisogno della tupla per inserire informazioni nel DB. Dopo aver aggiunto le informazioni al DB, devo eliminare la tupla? Voglio dire, non ho più bisogno della tupla.

Risposte:


371

Le tuple sono immutabili; non puoi cambiare le variabili che contengono dopo la costruzione. Tuttavia, puoi concatenarli o tagliarli per formare nuove tuple:

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

E, naturalmente, costruiscili dai valori esistenti:

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

ho solo bisogno di queste tuple per aggiungere al db dopo l'input dell'utente. quindi dovrei distruggere queste tuple dopo aver completato l'aggiornamento al db?
Amit

5
Non è necessario distruggere le tuple dopo aver aggiornato il db. Se escono dal campo di applicazione, devono essere raccolti.
Justin Standard,

Per aggiungere una stringa alla tupla senza romperla, controlla stackoverflow.com/a/16449189
Enzo Ferey,

Solo aggiungere su, a = ()e b= a + (5), porta a b = 5, quindi b= a + (5,), porterebbe a b = (5,); una tupla.
yashgarg1232,

222

Puoi iniziare con una tupla vuota con qualcosa del genere t = (). Puoi aggiungere con +, ma devi aggiungere un'altra tupla. Se si desidera aggiungere un singolo elemento, ne fanno un Singleton: t = t + (element,). Puoi aggiungere una tupla di più elementi con o senza quella virgola finale.

>>> 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
In questo caso di esempio, si può anche fare: t = ()quindit += (1,)
Douglas Denhartog,

2
Quali sono i vantaggi dell'inclusione della virgola finale?
Splic

13
La virgola finale è necessaria per il singleton per evitare confusione tra un elemento tra parentesi. Le parentesi semplici vengono utilizzate in ordine di operazioni, quindi (7) è solo 7. Ma (7,) è una tupla a un elemento in cui l'elemento è 7. Allo stesso modo, 3 * (7 + 8) = 45, ma 3 * ( 7 + 8,) = (15, 15, 15) - ha senso?
Daniel,

2
Per quanto riguarda le tuple multi-elemento, la virgola finale è opzionale al 100%. Includerlo in qualche modo significa "questa è una tupla, so che è una tupla, so come funzionano le tuple e so che posso farlo." Ma nessuna virgola potrebbe sembrare più naturale. Idk. Sta a te.
Daniel,

Penso che sia importante notare che le tuple sono immutabili - non possono essere effettivamente modificate. Ciò che questa soluzione fa è creare una nuova tupla basata su due tuple esistenti .
That1 Acquista il

44

Un'altra tattica non ancora menzionata consiste nell'utilizzare l'aggiunta a un elenco e quindi la conversione dell'elenco in una tupla alla fine:

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

ritorna

(0, 1, 2, 3, 4)

A volte lo uso quando devo passare una tupla come argomento di funzione, che è spesso necessario per le funzioni intorpidite.


3
È utile sapere che al contrario, vale a dire che list(someTuple)funziona anche. I due tipi di oggetto sono apparentemente intercambiabili
khaverim,

Non realmente intercambiabile, penso che la conversione da tupla a lista copierà tutti gli elementi nell'elenco, quindi ci sono sicuramente dei posti per evitarlo
gbtimmon

41

In Python 3, puoi usare *per creare una nuova tupla di elementi dalla tupla originale insieme al nuovo elemento.

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

2
Questo è di gran lunga il più pitonico per me.
Bumsik Kim,

6
Questo è 10 volte più lento di tuple1 + ("baz",).
Mateen Ulhaq,

9

"una volta che le informazioni vengono aggiunte al DB, devo eliminare la tupla? Voglio dire, non ho più bisogno della tupla."

No.

In generale, non c'è motivo di eliminare nulla. Ci sono alcuni casi speciali per la cancellazione, ma sono molto, molto rari.

È sufficiente definire un ambito ristretto (ovvero una definizione di funzione o una funzione di metodo in una classe) e gli oggetti saranno immondizia raccolti alla fine dell'ambito.

Non preoccuparti di eliminare nulla.

[Nota. Ho lavorato con un ragazzo che, oltre a cercare di eliminare gli oggetti, scriveva sempre metodi di "reset" per eliminarli. Come se li stesse salvando e riutilizzandoli. Anche una sciocca presunzione. Ignora gli oggetti che non usi più. Se definisci le tue funzioni in blocchi di codice abbastanza piccoli, non hai più nulla a cui pensare.]


7

È facile come il seguente:

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

Tuttavia, le tuple in Python sono immutabili , quindi non è possibile aggiungere variabili a una tupla una volta creata.


3

Come hanno notato altre risposte, non è possibile modificare una tupla esistente, ma è sempre possibile creare una nuova tupla (che può prendere alcuni o tutti gli elementi da tuple esistenti e / o altre fonti).

Ad esempio, se tutti gli elementi di interesse si trovano in variabili scalari e si conoscono i nomi di tali variabili:

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

da utilizzare, ad esempio, come in questo esempio:

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

ovviamente questo caso verrebbe più semplicemente espresso come (x, y, z)(o addirittura rinunciando del tutto ai nomi (23, 45, 67)), ma l' maketupleapproccio potrebbe essere utile in alcuni casi più complicati (ad es. dove i nomi da usare sono anche determinati dinamicamente e aggiunti a un elenco durante calcolo).


2

Sono abbastanza sicuro che la sintassi per questo in Python sia:

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

una volta impostato, le tuple non possono essere modificate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.