Можно ли индексировать вложенные списки с помощью кортежей в python?
Я только начал с python и очень скоро задался вопросом, возможно ли индексировать вложенный список с помощью кортежа. Что-то вроде: elements[(1,1)]
index = ( (0,0), (0,2), (2,0), (2,2) )
elements = [ [ 'a', 'b', 'c'],
[ 'c', 'd', 'e'],
[ 'f', 'g', 'h'] ]
for i in index:
print (elements [ i[0] ] [ i[1] ])
# I would like to do this:
# print(elements[i])
Это кажется полезной функцией. Есть ли какой-нибудь способ сделать это? Или, может быть, простая альтернатива?
5 ответов:
Да, вы можете сделать это. Я написал аналогичный пример:
index = [ [0,0], [0,2], [2,0], [2,2] ] elements = [ [ 'a', 'b', 'c'], [ 'c', 'd', 'e'], [ 'f', 'g', 'h'] ] for i,j in index: print (elements [ i ] [ j ])
A c f h
Если вы действительно хотите использовать кортежи для индексирования, вы можете реализовать свой собственный класс, который расширяет
list
и переопределяет__getattr__
для работы с кортежами и использовать это:class TList(list): def __getitem__(self, index): if hasattr(index, "__iter__"): # index is list-like, traverse downwards item = self for i in index: item = item[i] return item # index is not list-like, let list.__getitem__ handle it return super().__getitem__(index) elements = TList([ [ 'a', 'b', 'c'], [ 'c', 'd', 'e'], [ 'f', 'g', 'h'] ]) index = ( (0,0), (0,2), (2,0), (2,2) ) for i in index: print(elements[i])
A
c
f
h
# I would like to do this: # print(elements[i])
Нет вы не можете индексировать конкретное значение вложенного списка таким образом.
Единственным немного лучшим способом было бы "распаковать" кортежи, которые вы повторяете над ними:
Пример:
for i, j in index: print(elements[i][j])