2016-05-03 10 views
0

Dies ist Python 3.Tupel Listen in python3 und Modifizieren

Umwandlung Lets sagen, ich habe ein Tupel

tup = (1, 2, 3) 

Und dieses Tupel wird in einer Liste gespeichert:

a = [] 
a[0] = tup 

I bin über die Liste a iterieren. Was ich tun muss, ist den Inhalt von tup zu ändern. Das heißt, ich möchte die Werte ändern und gleichzeitig in der Liste a beibehalten. Ist das korrekt?

tmp = list(a[0]) 
tmp[0] = 0 # Now a[0] = (0, 2, 3) 

Außerdem: Ich bin mir bewusst, Tupeln sind so konzipiert, unveränderlich zu sein, und dass eine Liste ist wahrscheinlich besser für tup anstelle eines Tupels. Es ist mir jedoch unangenehm, append Elemente zur Liste hinzuzufügen: Die Liste speichert Elemente einer festen Größe, und ein Tupel ist ein besserer Vertreter dieser. Ich würde eher Dinge manuell in die Liste hinzufügen wie tup[0] = blah als tup.append(blah)

+0

Sie scheinen einige Missverständnisse über Listen zu haben: 'a [0] = tup' ->' IndexError: Listenzuweisungsindex außerhalb des Bereichs '. Sie _must_ verwenden 'a.append (tup)' (oder weisen Sie die Liste mit 'a = [None]') vor. Die einzige Möglichkeit, ein unveränderliches Element in einer Liste - wie ein Tupel - zu ändern, ist es, es durch ein anderes zu ersetzen. – martineau

+0

yup, der Debugger hat mich das reparieren lassen. Danke. – socrates

Antwort

0

Die Antwort darauf ist einfach. Sie können nicht, und es macht keinen Sinn, dies zu tun. Listen sind änderbar, Tupel nicht. Wenn Sie möchten, dass die Elemente von a veränderbar sind, lassen Sie sie als Listen anzeigen, z. B. a = [[1,2,3],...].

Wenn Sie sie wirklich als Tupel haben möchten, aber ändern Sie sie, könnten Sie etwas in der Art von [0] = (0,) + a [0] [1:] tun. Dies würde ein neues Tupel in der Liste erzeugen und wäre weniger effizient als nur eine Liste von Listen zu verwenden.

Furthermore: I am aware tuples are designed to be immutable, and that a list is probably better for tup instead of a tuple.

Es ist.

However, I am uncomfortable using append to add elements to the list: the list is storing elements of a fixed size, and a tuple is a better representative of this.

Ich bin mir nicht sicher, was Sie damit meinen. Meinst du das a ist eine feste Größe, oder Elemente von a sind eine feste Größe? In beiden Fällen, wie macht dies Tupel besser?

Die Verwirrung hier könnte sein, dass Listen in Python keine Listen im Sinne der Informatik sind; Sie sind eigentlich Arrays. Sie sind O (1) zum Abrufen, O (1) zum Setzen von Elementen und normalerweise O (1) zum Anhängen, außer sie müssen in der Größe geändert werden.

I'd rather add things manually to the list like tup[0] = blah than tup.append(blah)

Sie mit einem Tupel nicht zu tun, aber Sie entweder mit einer Liste zu tun, und sie sind beide um O (1).

Wenn Sie wirklich veränderbare Arrays mit fester Größe möchten, können Sie sich numpy ansehen oder Python-Listen mit festgelegten Größen initialisieren.