Matrix mithilfe von Liste erstellen

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
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

Guten Abend,
ich möchte in Python mithilfe einer Liste eine Matrix erzeugen, leider funktioniert das nicht so wie ich mir das vorstelle. Was ich will:
1,2,3,4,5,6,7,8,9,10
11,12,13,14.....
Aber leider bekomme ich immer nur das hier:
91,92,93,94....
91,92,93.....

Könnt ihr mir sagen woran das liegt?

Code: Alles auswählen

list = [[0]*10] * 10
number = 1
print number , list
for counter in range(0,10):
	for  row in range (0,10):
		list[counter][row] = number
		number = number + 1
print list
Edit: Kann es sein, das [[0]*10] * 10 nur Verweise auf ein Objekt erstellt?

Vielen Dank für die Antwort im voraus
Gruß
Dr.Miles
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Bitte hier weiterlesen:

http://www.python-forum.de/topic-17235.html

Das Problem hatten wir diese Woche schon 3mal :P
BlackJack

Code: Alles auswählen

In [39]: matrix = [[0] * 10] * 10

In [40]: matrix
Out[40]:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [41]: matrix[0][0] = 42

In [42]: matrix
Out[42]:
[[42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [42, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

In [43]: matrix[0] is matrix[1]
Out[43]: True
Wie Du siehst enthält `matrix` 10 Referenzen auf die selbe Liste. Du musst 10 eigentständige Listen erzeugen:

Code: Alles auswählen

In [44]: from itertools import count

In [45]: counter = count(1)

In [46]: matrix = [[counter.next() for _ in xrange(10)] for _ in xrange(10)]

In [47]: matrix
Out[47]:
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
 [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
 [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
 [41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
 [51, 52, 53, 54, 55, 56, 57, 58, 59, 60],
 [61, 62, 63, 64, 65, 66, 67, 68, 69, 70],
 [71, 72, 73, 74, 75, 76, 77, 78, 79, 80],
 [81, 82, 83, 84, 85, 86, 87, 88, 89, 90],
 [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

str1442 hat geschrieben:Das Problem hatten wir diese Woche schon 3mal :P
Otz, tut mir Leid, werde in Zukunft länger suchen (mehr im Forum als im Quellcode, weil das habe ich definitiv) . Hatte den Thread mehrdimensionale Arrays schon gesehen, aber gedacht, ich will keine mehrdimensionalen Arrays, sondern Matrizen :-D, obwohl ds ja gewissermaßen dasselbe ist wenn ich drüber nachdenke ^^


PS: Die Frage kommt bestimmt so oft, weil es im "Wie ein Informatiker denken lernen" zwar beschrieben steht, wie man Matrizen bearbeitet aber nicht wie man leere richtig anlegt...
Gruß
Dr.Miles
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Antworten