Seite 1 von 1
Style Frage 2D Array
Verfasst: Dienstag 5. April 2005, 20:56
von Viel
Hi!
Ich kenne Python erst kurz, bin also noch neu.
Wie würde ihr den Code unten schreiben?
Der Code erzeugt ein 2D Array gefüllt mit Zufallszahlen.
Code: Alles auswählen
def Erzeuge_Spielfeld():
import random
y = 10
x = 10
iy = 0
ix = 0
feld = []
while iy < y:
spalte = []
while ix < x:
spalte.append(random.randint(1,5))
ix = ix + 1
feld.append(spalte)
iy = iy + 1
ix = 0
del spalte
return feld
print 'modul test.py wird ausgefuehrt'
Erzeuge_Spielfeld()
cu
Verfasst: Dienstag 5. April 2005, 21:09
von mawe
Hi!
Ich würds so in etwa machen:
Code: Alles auswählen
import random
x = 10
y = 10
feld = []
for i in range(x):
feld.append([random.randint(1,5) for i in range(y)])
print feld
Gruß, mawe
Verfasst: Dienstag 5. April 2005, 21:32
von Viel
thx! so siehts schon schön aus.
Verfasst: Mittwoch 6. April 2005, 06:46
von CM
Hi
Wenn Du mehr "array-Power" haben willst, geht es auch mit numarray:
Code: Alles auswählen
from numarray.random_array import *
seed()
random((x,y))
Gruß,
Christian
Re: Style Frage 2D Array
Verfasst: Samstag 2. November 2024, 19:33
von __blackjack__
Im Beitrag von Viel ist das ``del`` unsinnig. Das löscht den Namen `spalte` der gleich darauf beim nächsten Schleifendurchlauf wieder definiert wird. Die Liste löscht das nicht, was auch fatal wäre, denn die wird ja noch als Element der umgebenden `feld`-Liste verwendet. Und die ``while``-Schleifen sind ja eigentlich ``for``-Schleifen:
Code: Alles auswählen
#!/usr/bin/env python3
import random
from pprint import pprint
def main():
y = 10
x = 10
feld = []
for _ in range(y):
spalte = []
for _ in range(x):
spalte.append(random.randint(1, 5))
feld.append(spalte)
pprint(feld)
if __name__ == "__main__":
main()
Beim Beitrag von mawe frage ich mich warum die einzelne Zeile (oder Spalte) mit einer „list comprehension“ erstellt wird, aber die das gesamte Feld mit einer Schleife und `append()`, statt das auch mit einer „list comprehension“ zu machen:
Code: Alles auswählen
#!/usr/bin/env python3
import random
from pprint import pprint
def main():
x = 10
y = 10
feld = [[random.randint(1, 5) for _ in range(y)] for _ in range(x)]
pprint(feld)
if __name__ == "__main__":
main()
Das von CM vorgeschlagene `numarray`-Modul ist das letzte mal 2006 im Package-Index aktualisiert worden. Ich denke die Leute sind mittlerweile auf Numpy umgestiegen:
Code: Alles auswählen
#!/usr/bin/env python3
from numpy.random import default_rng
def main():
x = 10
y = 10
feld = default_rng().integers(1, 5, (x, y))
print(feld)
if __name__ == "__main__":
main()