Frage von Pretan4, 34

kurze Frage zur Listenerstellung in Python (Programmiersprache)?

Hi , was muss ich tun ,wenn ich sehr viele nummerierte Listen bei python erstellen will ? Zum Beispiel alle Möglichkeiten , aus 3 Spielwürfeln .

W1=[1,1,1] W2=[1,1,2] W3=[1,1,3] W4=[1,1,4] W5=[1,1,5] W6=[1,1,6] W7=[1,2,1]

. . .

W[6^3]=[6,6,6]

ich weis halt nicht ,wie man mehrere,nummerierte listen erstellen lässt.

Danke schonmal

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, Community-Experte für programmieren, 13

Am elegantesten geht das so:

from itertools import product

result = list(list(w) for w in product(range(1, 7), repeat=3))

print(result)

Das liefert dir folgendes Ergebnis:

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 1, 4], [1, 
1, 5], [1, 1, 6], [1, 2, 1], [1, 2, 2], [1, 2,
3], [1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 3, 1],
[1, 3, 2], [1, 3, 3], [1, 3, 4], [1, 3, 5], [1,
3, 6], [1, 4, 1], [1, 4, 2], [1, 4, 3], [1, 4,
4], [1, 4, 5], [1, 4, 6], [1, 5, 1], [1, 5, 2],
[1, 5, 3], [1, 5, 4], [1, 5, 5], [1, 5, 6], [1,
6, 1], [1, 6, 2], [1, 6, 3], [1, 6, 4], [1, 6,
5], [1, 6, 6], [2, 1, 1], [2, 1, 2], [2, 1, 3],
[2, 1, 4], [2, 1, 5], [2, 1, 6], [2, 2, 1], [2,
2, 2], [2, 2, 3], [2, 2, 4], [2, 2, 5], [2, 2,
6], [2, 3, 1], [2, 3, 2], [2, 3, 3], [2, 3, 4],
[2, 3, 5], [2, 3, 6], [2, 4, 1], [2, 4, 2], [2,
4, 3], [2, 4, 4], [2, 4, 5], [2, 4, 6], [2, 5,
1], [2, 5, 2], [2, 5, 3], [2, 5, 4], [2, 5, 5],
[2, 5, 6], [2, 6, 1], [2, 6, 2], [2, 6, 3], [2,
6, 4], [2, 6, 5], [2, 6, 6], [3, 1, 1], [3, 1,
2], [3, 1, 3], [3, 1, 4], [3, 1, 5], [3, 1, 6],
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 2, 4], [3,
2, 5], [3, 2, 6], [3, 3, 1], [3, 3, 2], [3, 3,
3], [3, 3, 4], [3, 3, 5], [3, 3, 6], [3, 4, 1],
[3, 4, 2], [3, 4, 3], [3, 4, 4], [3, 4, 5], [3,
4, 6], [3, 5, 1], [3, 5, 2], [3, 5, 3], [3, 5,
4], [3, 5, 5], [3, 5, 6], [3, 6, 1], [3, 6, 2],
[3, 6, 3], [3, 6, 4], [3, 6, 5], [3, 6, 6], [4,
1, 1], [4, 1, 2], [4, 1, 3], [4, 1, 4], [4, 1,
5], [4, 1, 6], [4, 2, 1], [4, 2, 2], [4, 2, 3],
[4, 2, 4], [4, 2, 5], [4, 2, 6], [4, 3, 1], [4,
3, 2], [4, 3, 3], [4, 3, 4], [4, 3, 5], [4, 3,
6], [4, 4, 1], [4, 4, 2], [4, 4, 3], [4, 4, 4],
[4, 4, 5], [4, 4, 6], [4, 5, 1], [4, 5, 2], [4,
5, 3], [4, 5, 4], [4, 5, 5], [4, 5, 6], [4, 6,
1], [4, 6, 2], [4, 6, 3], [4, 6, 4], [4, 6, 5],
[4, 6, 6], [5, 1, 1], [5, 1, 2], [5, 1, 3], [5,
1, 4], [5, 1, 5], [5, 1, 6], [5, 2, 1], [5, 2,
2], [5, 2, 3], [5, 2, 4], [5, 2, 5], [5, 2, 6],
[5, 3, 1], [5, 3, 2], [5, 3, 3], [5, 3, 4], [5,
3, 5], [5, 3, 6], [5, 4, 1], [5, 4, 2], [5, 4,
3], [5, 4, 4], [5, 4, 5], [5, 4, 6], [5, 5, 1],
[5, 5, 2], [5, 5, 3], [5, 5, 4], [5, 5, 5], [5,
5, 6], [5, 6, 1], [5, 6, 2], [5, 6, 3], [5, 6,
4], [5, 6, 5], [5, 6, 6], [6, 1, 1], [6, 1, 2],
[6, 1, 3], [6, 1, 4], [6, 1, 5], [6, 1, 6], [6,
2, 1], [6, 2, 2], [6, 2, 3], [6, 2, 4], [6, 2,
5], [6, 2, 6], [6, 3, 1], [6, 3, 2], [6, 3, 3],
[6, 3, 4], [6, 3, 5], [6, 3, 6], [6, 4, 1], [6,
4, 2], [6, 4, 3], [6, 4, 4], [6, 4, 5], [6, 4,
6], [6, 5, 1], [6, 5, 2], [6, 5, 3], [6, 5, 4],
[6, 5, 5], [6, 5, 6], [6, 6, 1], [6, 6, 2], [6,
6, 3], [6, 6, 4], [6, 6, 5], [6, 6, 6]]

Falls dir ein Iterator, bestehend aus Tupeln reicht, kannst du die entscheidende Zeile auch durch ...

result = product(range(1, 7), repeat=3)

... ersetzen, was nochmal deutlich kürzer ist.

Viel Spaß! :)

Kommentar von Pretan4 ,

haben die listen jetzt auch indiwiduelle namen ? 

wie könnte ich jetzt z.B. alle mehrfach vorkommenden listen entfernen ?   [1,1,2]=[1,2,1]=[2,1,1]     davon brauch ich ja nur eine :D

Kommentar von TeeTier ,

Oh, sorry ... habe nicht mitbekommen, dass du logisch doppelte Einträge entfernen möchtest ... :)

Das geht natürlich ebenfalls in einer Zeile so:

result = sorted(set(tuple(sorted(x)) for x in product(range(1, 7), repeat=3)))

Falls dir das zu lang sein sollte, kannst du die einzelnen Teile ja noch in Hilfsvariablen aufteilen.

Das Ganze liefert dir dann folgende Liste ohne Dubletten:

[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 
1, 5), (1, 1, 6), (1, 2, 2), (1, 2, 3), (1, 2,
4), (1, 2, 5), (1, 2, 6), (1, 3, 3), (1, 3, 4),
(1, 3, 5), (1, 3, 6), (1, 4, 4), (1, 4, 5), (1,
4, 6), (1, 5, 5), (1, 5, 6), (1, 6, 6), (2, 2,
2), (2, 2, 3), (2, 2, 4), (2, 2, 5), (2, 2, 6),
(2, 3, 3), (2, 3, 4), (2, 3, 5), (2, 3, 6), (2,
4, 4), (2, 4, 5), (2, 4, 6), (2, 5, 5), (2, 5,
6), (2, 6, 6), (3, 3, 3), (3, 3, 4), (3, 3, 5),
(3, 3, 6), (3, 4, 4), (3, 4, 5), (3, 4, 6), (3,
5, 5), (3, 5, 6), (3, 6, 6), (4, 4, 4), (4, 4,
5), (4, 4, 6), (4, 5, 5), (4, 5, 6), (4, 6, 6),
(5, 5, 5), (5, 5, 6), (5, 6, 6), (6, 6, 6)]

Wie du siehst, ist das dann zwar eine Liste aus Tupeln, aber die wolltest du ja sowieso nicht mehr weiter bearbeiten, oder? Wenn doch, einfach mit:

result = list(list(x) for x in result)

... in eine Liste aus Listen konvertieren. :)

Viel Spaß damit! :)

Antwort
von peterk100, 19

Du kannst mehrere Listen verschachteln, also z.B.
[[1,1,1],[1,1,2],[1,1,3]]

Weitere Infos findest du auch hier: http://python.net/~gherman/publications/tut-de/online/tut/node5.html#SECTION0051...

Gibt vermutlich auch noch bessere Seiten, musst halt mal suchen. Aber das hatte ich auf die Schnelle gefunden.

Antwort
von 3v1lH4x0R, 9

Wenn sie verschiedene namen haben solltest du dir mal das exec statement ansehen

Exec string
Führt den string als quelltext aus

For i in xrange(7):
Exec "_"+i+"=1"

Setzt _1,_2,_3...,_7 auf 1

Keine passende Antwort gefunden?

Fragen Sie die Community