Vor jeder Innen Liste in einer großen Liste einen Index einfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dvdscot
User
Beiträge: 10
Registriert: Donnerstag 27. April 2023, 11:46

Hallo,

ich hab folgende Liste:
[
[0, a, b, c],
[1, a, b, c],
[2, a, b, c],
[0, x, y, z],
[1, x, y, z],
[2, x, y, z],
...
]

Nun möchte ich folgendes:

[
[0, 0, a, b, c],
[1, 1, a, b, c],
[2, 2, a, b, c],
[3, 0, x, y, z],
[4, 1, x, y, z],
[5, 2, x, y, z],
...
]

Also einen eindeutigen Index am Anfang von jeder Innenliste.
Das hat nicht geklappt:

Code: Alles auswählen

for i in range(len(bestbooks_list)):
    print(i)
    bestbooks_list.insert(0, i)
bestbooks_list
Auch bestbooks_list[0].insert(0, i) nicht. Wie geht das am besten? Danke
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Dvdscot,

Code: Alles auswählen

meine_liste = [[1,'a', 'b'], [1,'a', 'b'], [1,'a', 'b'], [1,'a', 'b']]
for index, liste in enumerate(meine_liste):
    liste.insert(0, index)
print(meine_liste)

oder mit range:
[code]for index in range(len(meine_liste)):
    meine_liste[index].insert(0, index)
print(meine_liste)
[/code]Gruss Peter
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Über einen Index iteriert man nicht. Statt Listen zu verändern erzeugt man neue Listen.

Code: Alles auswählen

werte = [[1,'a', 'b'], [1,'a', 'b'], [1,'a', 'b'], [1,'a', 'b']]
werte_mit_index = [
    [index] + zeile 
    for index, zeile in enumerate(werte)
]
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dvdscot: Im ersten Fall fügst Du die Zahlen an den Anfang der äusseren Liste an, und im zweiten Fall alle an die erste Liste, weil da ein fester Index 0 steht.

Man sollte in der Regel aber lieber neue Datenstrukturen erstellen, als bestehende zu verändern. Ginge beispielsweise so:

Code: Alles auswählen

In [5]: items
Out[5]: [[1, 'a', 'b'], [1, 'a', 'b'], [1, 'a', 'b'], [1, 'a', 'b']]

In [6]: [[i, *item] for i, item in enumerate(items)]
Out[6]: [[0, 1, 'a', 'b'], [1, 1, 'a', 'b'], [2, 1, 'a', 'b'], [3, 1, 'a', 'b']]
Ich habe so ein bisschen den Verdacht das die inneren Listen Datensätze sind in denen die Position des Elements bestimmt was dieses Element bedeutet und die Elemente in einer inneren Liste nicht alle den gleichen Typ und/oder die gleiche Bedeutung haben — das wäre ein „code smell“, denn dafür benutzt man keine Listen, denn das Indexwerte eine magische Bedeutung haben ist unübersichtlich. Wenn man dann noch Elemente vorne oder mitten drin anfügt, hat noch nicht mal mehr ein Indexwert eine feste Bedeutung, denn dadurch verschieben die sich ja.

Grunddatentypen wie `list`/`liste` gehören nicht in Namen. Denn den Typen ändert man gerne auch mal auf was spezielleres oder gar was selbst geschriebenes, und dann hat man entweder falsche, irreführende Namen oder muss überall die betroffenen Namen suchen und ändern.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Dvdscot
User
Beiträge: 10
Registriert: Donnerstag 27. April 2023, 11:46

Vielen Dank für die vielen Möglichkeiten, da war ich mit der range(len) ja ganz nah dran.

Die Liste hab ich in ein Dictionary umgewandelt. Die nächsten 4 Tage muss ich daraus ein dickes Programm schreiben.
Antworten