gpt4 book ai didi

python - 如何从 'column' 快速获取 'matrix' ? (不一定是数字)

转载 作者:行者123 更新时间:2023-12-01 02:33:10 25 4
gpt4 key购买 nike

各位,

假设我有这个列表:

l=[['-40', 'TT', '0.8', '0', '10U', '4'],
['125', 'FF', '0.8', '0', '10U', '16'],
['125', 'FF', '0.8', '0', '10U', '4' ],
['30', 'FF', '0.8', '0', '10U', '64'],
['125', 'FF', '0.3', '0', '1U', '16' ],
['125', 'FF', '0.8', '0', '1U', '4' ],
['30', 'FF', '0.8', '0', '1U', '64' ],
['125', 'FF', '0.8', '0', '4U', '16' ],
['125', 'SS', '0.8', '0', '4U', '4' ],
['125', 'FF', '0.8', '0', '4U', '64' ],
['125', 'FF', '0.8', '1', '10U', '4' ],
['125', 'FF', '0.8', '1', '1U', '4' ],
['125', 'SS', '0.8', '1', '4U', '4' ],
['125', 'FF', '0.9', '16', '10U', '64'],
['125', 'FF', '0.8', '16', '1U', '64'],
['125', 'FF', '0.8', '16', '4U', '64'],
['125', 'FF', '0.8', '2', '10U', '4' ],
['125', 'FF', '0.8', '2', '1U', '4' ]
]

您可能会注意到,它是一个大小为 (18x6) 的矩阵,其中元素是仅在某些列中表示 float 的字符串。

我可以很高兴地通过应用将其排序在第三列

newL = sorted(l, key = lambda t: float(t[2]))

newL 内容将是(我从现在开始禁止 [,]):

'125', 'FF', '0.3', '0', '1U', '16'
'-40', 'TT', '0.8', '0', '10U', '4'
'125', 'FF', '0.8', '0', '10U', '16'
'125', 'FF', '0.8', '0', '10U', '4'
'30', 'FF', '0.8', '0', '10U', '64'
'125', 'FF', '0.8', '0', '1U', '4'
'30', 'FF', '0.8', '0', '1U', '64'
'125', 'FF', '0.8', '0', '4U', '16'
'125', 'SS', '0.8', '0', '4U', '4'
'125', 'FF', '0.8', '0', '4U', '64'
'125', 'FF', '0.8', '1', '10U', '4'
'125', 'FF', '0.8', '1', '1U', '4'
'125', 'SS', '0.8', '1', '4U', '4'
'125', 'FF', '0.8', '16', '1U', '64'
'125', 'FF', '0.8', '16', '4U', '64'
'125', 'FF', '0.8', '2', '10U', '4'
'125', 'FF', '0.8', '2', '1U', '4'
'125', 'FF', '0.9', '16', '10U', '64'

在 Matlab 表示法中,我将使用 newL(:,3) 来访问第三列。这会给我一个包含

的(列)向量
'0.3'
'0.8'
'0.8'
'0.8'
'0.8'
etc.

在Python中,我可以想象通过迭代构建它来提取这个向量,以从任何列表中提取第三个元素:

col = []
for line in newL:
col.append(line[2])

结果是:

['0.3', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.9']

但是......有没有一种更Pythonic的方法来从newL获取第三列?

如果您有任何绝妙的想法,我可以更改数据结构(也许列表列表不是处理此问题的最佳方法)。

最佳答案

是的。例如,您可以在 operator 包的 itemgetter 上使用 map(..):

from operator import itemgetter

result = map(itemgetter(2), newL)

或者没有内置函数,您可以使用列表理解:

result = [row[2] for row in newL]

两者产量:

>>> map(itemgetter(2), newL)
['0.3', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.9']
>>> [row[2] for row in newL]
['0.3', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.9']

, map 构造一个列表,在 然而,map 是一个惰性可迭代对象。为了具体化列表,您需要用 list(..) 将其包围。

您还可以使用numpy并执行高级索引:

import numpy as np

a = np.array(newL)
result = a[:,2]

结果是一个 numpy 数组:

>>> a[:,2]
array(['0.3', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8',
'0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.8', '0.9'],
dtype='<U3')

但这仅适用于列表的矩形列表。

关于python - 如何从 'column' 快速获取 'matrix' ? (不一定是数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46558909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com