Seite 1 von 1
2D-Liste
Verfasst: Mittwoch 30. April 2008, 21:04
von Jan.O
Hi,
was ist der "beste" Weg, eine 2-Dimensionale liste zu erstellen und dann zu kopieren?
Meine aktuelle methode:
Jan
Verfasst: Mittwoch 30. April 2008, 21:42
von BlackJack
Bei Deinem Quelltext kommt das hier heraus:
Code: Alles auswählen
In [50]: n = 5
In [51]: [['' for n in range(0,n)] for n in range(0,n)]
Out[51]: [[], [''], ['', ''], ['', '', ''], ['', '', '', '']]
Man kann das Ergebnis zwar als zweidimensional ansehen, aber irgendwie denke ich, Du meintest etwas anderes. Wenn das innerste Element immer das selbe sein darf:
Code: Alles auswählen
In [54]: [[''] * n for dummy in range(n)]
Out[54]:
[['', '', '', '', ''],
['', '', '', '', ''],
['', '', '', '', ''],
['', '', '', '', ''],
['', '', '', '', '']]
Verfasst: Mittwoch 30. April 2008, 21:43
von sma
Entweder
oder du benutzt eigene Listen, bei denen du ein copy-on-write implementierst. Das kann je nach Anwendungsfall effizienter sein. Dafür hast du eine Indirektion bei jedem "get", weil Python leider kein "#become:" à la Smalltalk kennt. Ich würde auch darüber nachdenken, statt Listen von Listen nur eine flache Liste zu benutzen. Könnte effizienter sein. Zum Beispiel:
Code: Alles auswählen
class list2d:
def __init__(self, x, y):
self.data, self.y = [None] * x * y, y
def __getitem__(self, (x, y)):
return self.data[self.y * y + x]
Stefan