@EyDu
Das sieht doch nochmal um längen schicker aus. Könnte man die lambda-Funktion nicht noch durch list.__getitem__ ersetzen?
Obwohl ich Wörterbücher nicht damit mischen würde, hättest du natürlich recht, daran und slices habe ich nicht gedacht und vergess jetzt bloß nicht "Ellipsis" noch mit einzubauen
Aber wie gestaltet man damit das setzen des anderen Liste/Arrays?
ndarray auf einzelne Werte zu greifen
@Xynon1: Dann funktioniert es ja nur mit Listen. Für's setzen müsste man sich eine Funktion schreiben die sich auf die vorhandene Abstützt.
Stimmt, und ich nehme mal an das "type(data).__getitem__" auch nicht angebracht ist, weil es im Vergleich zu der lambda-Funktion etwas unschöner ausieht.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Dann also so?
Ergebnis:
Code: Alles auswählen
class Lizzy(list):
def __getitem__(self, index):
if isinstance(index, (int, slice)):
return list.__getitem__(self, index)
else:
return reduce(list.__getitem__, index, self)
def __setitem__(self, index, item):
if isinstance(index, (int, slice)):
list.__setitem__(self, index, item)
else:
list.__setitem__(self[index[:-1]], index[-1], item)
li = Lizzy([['a', 'b', 'c'], ['d', 'e', 'f']])
print li[1]
print li[1,1]
print li[slice(1,3)]
print li[1, slice(1,3)]
li[0,2] = li[1,1]
print li
li[0, slice(0,3)] = li[1, slice(0,2)]
print li
Code: Alles auswählen
['d', 'e', 'f']
e
[['d', 'e', 'f']]
['e', 'f']
[['a', 'b', 'e'], ['d', 'e', 'f']]
[['d', 'e'], ['d', 'e', 'f']]
In specifications, Murphy's Law supersedes Ohm's.
Verhält sich aber irgendwie anders als ich erwarten würde:
Mit den Slice-Ausdrücken kommt es so nicht klar, war zwar auch nicht die Bedingung, aber man würde halt was anderes erwarten.
Code: Alles auswählen
>>> li = Lizzy([['a', 'b', 'c'], ['d', 'e', 'f']])
>>> la = numpy.array(li)
>>> la
array([['a', 'b', 'c'],
['d', 'e', 'f']],
dtype='<U1')
>>> li
[['a', 'b', 'c'], ['d', 'e', 'f']]
>>> la[slice(0, 2), 0]
array(['a', 'd'],
dtype='<U1')
>>> li[slice(0, 2), 0]
['a', 'b', 'c']
>>>