如何索引 Python 中的嵌套列表?
How to index nested lists in 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 中获得此输出?
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')
Python 列表不像多维数组那样工作得很好。
如果您愿意添加额外的依赖项(例如,如果您要进行大量数组操作),numpy
允许您使用几乎与您正在寻找的语法完全相同的语法
import numpy as np
A = np.array([('a', 'b', 'c'),
('d', 'e', 'f'),
('g', 'h', 'i')])
这会将行输出为 np.array(可以像列表一样访问):
>>> A[:,0]
array(['a', 'd', 'g'])
获取第一行作为元组:
>>> tuple(A[:,0])
('a', 'd', 'g')
您可以将 lists/tuples 的列表转置为 zip(*list_of_lists)
,然后 select 您想要的项目。
>>> 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')
您还可以使用 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)
我有一个嵌套列表,如下所示:
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 中获得此输出?
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')
Python 列表不像多维数组那样工作得很好。
如果您愿意添加额外的依赖项(例如,如果您要进行大量数组操作),numpy
允许您使用几乎与您正在寻找的语法完全相同的语法
import numpy as np
A = np.array([('a', 'b', 'c'),
('d', 'e', 'f'),
('g', 'h', 'i')])
这会将行输出为 np.array(可以像列表一样访问):
>>> A[:,0]
array(['a', 'd', 'g'])
获取第一行作为元组:
>>> tuple(A[:,0])
('a', 'd', 'g')
您可以将 lists/tuples 的列表转置为 zip(*list_of_lists)
,然后 select 您想要的项目。
>>> 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')
您还可以使用 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)