Как индексировать вложенные списки в Python?
У меня есть вложенный список, как показано ниже:
A = [('a', 'b', 'c'),
('d', 'e', 'f'),
('g', 'h', 'i')]
И я пытаюсь напечатать первый элемент каждого списка, используя код:
A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')]
print A[:][0]
Но я получаю следующий результат:
('a', 'b', 'c')
Требуемый выход:
('a', 'd', 'g')
Как получить этот вывод в Python?
5 ответов:
A[:]
просто создает копию всего списка, после чего вы получаете элемент0
этой копии.Вы должны использовать понимание списка здесь:
[tup[0] for tup in A]
, чтобы получить список, или используйте
tuple()
с выражением генератора, чтобы получить Кортеж:tuple(tup[0] for tup in A)
Демо:
>>> A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] >>> [tup[0] for tup in A] ['a', 'd', 'g'] >>> tuple(tup[0] for tup in A) ('a', 'd', 'g')
Вы можете транспонировать список списков/кортежей с помощью
zip(*list_of_lists)
, а затем выбрать нужные элементы.>>> a [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] >>> b = zip(*a) >>> b [('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')] >>> b[0] ('a', 'd', 'g') >>> >>> c = zip(*a)[0] >>> c ('a', 'd', 'g') >>>
Вы также можете сделать это следующим образом:
>>> A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] >>> map(lambda t:t[0], A) ['a', 'd', 'g'] >>> tuple(map(lambda t:t[0],A)) ('a', 'd', 'g')
Списки Python не очень хорошо работают с многомерными массивами. Если вы хотите добавить дополнительную зависимость(например, если вы собираетесь делать много манипуляций с массивами),
numpy
позволяет вам использовать почти точный синтаксис, который вы ищетеimport numpy as np A = np.array([('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')])
Это выводит строку в виде np.массив(к которому можно обращаться как к списку):
>>> A[:,0] array(['a', 'd', 'g'])
Чтобы получить первый ряд в виде кортежа:
>>> tuple(A[:,0]) ('a', 'd', 'g')
Вы также можете получить желаемое поведение, используя
pandas
следующим образом:In [1]: import pandas as pd In [2]: A = [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i')] In [3]: df = pd.DataFrame(A) In [4]: df[:][0] Out[4]: 0 a 1 d 2 g Name: 0, dtype: object In [5]: df[:][0].values Out[5]: array(['a', 'd', 'g'], dtype=object)