如何在python中访问列表列表中的列

Posted

技术标签:

【中文标题】如何在python中访问列表列表中的列【英文标题】:How to access a column in a list of lists in python 【发布时间】:2017-11-05 17:00:34 【问题描述】:

我在 python 中有一个由列表列表建模的二维数组,我想提取该列。我进行了快速研究,发现了一种使用 numpy 数组的方法。问题是 我不想使用 numpy 所以我不想将列表列表转换为 numpy 数组,然后使用 [:,1] 语法。我尝试在正常的列表列表中使用它,但它显示错误,所以这是不可能的。我要求对列表列表进行类似的操作,而不必遍历每个元素(在 numpy 数组中,使用 [:,1] 语法访问列比遍历数组元素更快)。

我找到了这个link,但它再次建议在没有快捷方式的情况下迭代元素。

提前致谢。

【问题讨论】:

除非您使用 Numpy,否则您必须使用循环并遍历所有子列表。没有其他办法。事实上,Numpy 也遍历“子列表”,但以更有效的方式。 @DYZ 所以我有义务在函数中“硬编码”它,对吧?使用 numpy 让我很难使用另一个功能,这就是我想避免它的原因。 为什么称它为“硬编码”?写个函数就好了。 @DYZ 这并不是真正的硬编码(我把它放在引号之间:p),我只是认为可能存在比编写函数更快的方法。无论如何,如果这是唯一的方法,我想我别无选择。 “使用 numpy 让我很难使用另一个函数,这就是我想避免它的原因。”似乎不是一个正当的理由。究竟是什么让你在 numpy 中遇到困难?我相信你可以解决这个问题...... 【参考方案1】:

在处理列表列表时,列表推导是您的朋友:

In [111]: alist
Out[111]: 
[[0, 1, 2, 3, 4, 5],
 [6, 7, 8, 9, 10, 11],
 [12, 13, 14, 15, 16, 17],
 [18, 19, 20, 21, 22, 23]]
In [112]: [row[1] for row in alist]
Out[112]: [1, 7, 13, 19]

还有一个方便的“习惯用法”用于转置嵌套列表,将“列”转换为“行”:

In [113]: tlist = list(zip(*alist))
In [114]: tlist
Out[114]: 
[(0, 6, 12, 18),
 (1, 7, 13, 19),
 (2, 8, 14, 20),
 (3, 9, 15, 21),
 (4, 10, 16, 22),
 (5, 11, 17, 23)]
In [115]: tlist[1]
Out[115]: (1, 7, 13, 19)

【讨论】:

用另一个数组中的一行来改变整行的值怎么样? 第一个语法不是指向列吗? [row[1] for row in alist] -------> [col[1] for col in alist] 名称显然不会影响结果,但它反映了输出的内容。 [... for sublist in alist] 会更好。

以上是关于如何在python中访问列表列表中的列的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据库表中的列放入动态列表中?

如何在python列表中查找某个元素的索引

如何将数据从 python 列表中的列和行写入 csv 文件?

Python3基础 list 访问列表中的列表的元素

坚持不懈续集 初学者挑战学习Python编程30天

python如何操作列表-list