#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 это простая нотация