Seite 1 von 1

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

Verfasst: Dienstag 9. Mai 2023, 14:11
von Dvdscot
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

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

Verfasst: Dienstag 9. Mai 2023, 14:34
von peterpy
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

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

Verfasst: Dienstag 9. Mai 2023, 15:09
von Sirius3
Ü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)
]

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

Verfasst: Dienstag 9. Mai 2023, 15:23
von __blackjack__
@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.

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

Verfasst: Dienstag 9. Mai 2023, 15:30
von Dvdscot
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.