如何在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中访问列表列表中的列的主要内容,如果未能解决你的问题,请参考以下文章