Индексирование списка внутри списка [:][0][0] обозначение?

#python-3.x #list #indexing

Вопрос:

 list1 = [[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[13,14,15],[16,17,18],[19,20,21],[22,23,24]]]

for i in range(0,2):
     print(list1[:][i][1])
 

вывод =

 [4, 5, 6]
[16, 17, 18]
 

как мне заставить приведенный выше код работать так, чтобы:

желаемый результат =

 2 14
5 17
 

Какова правильная нотация индексирования для списка? У меня возникли особые проблемы с форматом списка [:], поскольку он, похоже, игнорируется приведенным выше кодом. Тнх

Комментарии:

1. list1[start:end] является нотацией среза, она создает копию списка, начинающуюся с индекса start и заканчивающуюся на end . Оба start и end являются необязательными, и по умолчанию для 0 и len(list1) соответственно. Это означает, что list1[:] это всего лишь поверхностная копия list1 .

Ответ №1:

Что-то вроде?

 >>> print(*map(' '.join, zip(*[map(str, list(zip(*x[:2]))[1]) for x in list1])), sep='n')
2 14
5 17
>>> 
 

Или:

 >>> print(*map(' '.join, zip(*[(str(x[0][1]), str(x[1][1])) for x in list1])), sep='n')
2 14
5 17
>>> 
 

Чтобы заставить его работать над вашим кодом, вам нужно будет сделать:

 for i in range(0,2):
     print(list1[0][i][1], list1[1][i][1])
 

Из:

 2 14
5 17
 

Причина , по которой ваш код не сработал, заключается в том, что он получает подсписку i , а не подсписку подсписки.

Комментарии:

1. Это может быть более полезно для OP, если вы добавите объяснение, почему это работает.

2. Да, спасибо за решение! но я немного новичок в python и на самом деле не понимаю ваш приведенный выше код. Разве нет другой простой нотации, в которой вы можете просто перейти к списку1[что-то][i][1], чтобы заставить код работать?

3. @clickclack Отредактировал мой ответ, проверьте вторую часть, запомните, что делать, если это поможет:), поставьте галочку

4. Большое спасибо! Оба решения помогли мне (ps. Я поставил галочку, но я не думаю, что переполнение стека регистрируется, потому что я слишком новичок)

Ответ №2:

вы можете конвертировать list numpy.array и легко делать то, что вы хотите, как показано ниже:

 list1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[13,14,15],[16,17,18],[19,20,21],[22,23,24]]])
for i in range(0,2):
     print(list1[:,i,1])
 

Выход:

 [ 2 14]
[ 5 17]
 

Чтобы пояснить, я приведу несколько примеров:

 print(list1)
# [[[ 1  2  3]
#   [ 4  5  6]
#   [ 7  8  9]
#   [10 11 12]]

#  [[13 14 15]
#   [16 17 18]
#   [19 20 21]
#   [22 23 24]]]

print(list1[:,0]) # : <-> list with index 0 of all 2d list in every row 
# [[ 1  2  3]
#  [13 14 15]]

print(list1[:,0,1])
# [ 2 14]
 

Комментарии:

1. @clickclack это простая нотация