2

假设我有以下列表

['foo', '333', 32.3]
['bar', 4.0]
['baz', '555', '2232',  -1.9]

我希望能够通过最后一个元素(浮点数)对此进行排序

['baz', '555', '2232',  -1.9]
['bar', 4.0]
['foo', '333', 32.3]

按升序排列

count_array = np.array([('foo', '333', 32.3),('bar', 4.0),('baz', '555', '2232', -1.9)], dtype = np.object)

idx = np.argsort(count_array[:, 1])

print(count_array[idx])

我希望能够通过比较它的最后一个元素来对二维列表进行排序。仅当子列表长度相同时,此代码才有效。

如何让它适用于可变长度子列表?

问题是这条线idx = np.argsort(count_array[:, 1])

4

1 回答 1

2

lists在这里只使用 plain ,当您创建一个numpy.array具有不同长度(或您的 中的不同数据类型)的子列表时,array您会得到一个arrayof type object,它缺乏许多有用numpy的功能并且很少是实现的好主意。

x = [['foo', '333', 32.3],
     ['bar', 4.0],
     ['baz', '555', '2232',  -1.9]]

result = sorted(x, key=lambda k : k[-1], reverse=True)

结果:

>>> result
[['foo', '333', 32.3], ['bar', 4.0], ['baz', '555', '2232', -1.9]]
于 2013-11-07T04:06:47.057 回答