【问题标题】:Sort list of number and array?排序数字和数组列表?
【发布时间】:2015-12-13 01:45:19
【问题描述】:

所以我创建了这个元组列表,其中每个元组由一个 int 和一个数组组成。

a = ((1, array([1,2,3])), (4, array([1,3,3])), (2, array([1,3,2]))) 

我想对列表进行排序,以便列表按 int 递增顺序排序。

即。

a = ((1, array([1,2,3])), (2, array([1,3,2])), (4, array([1,3,3]))) 

我尝试过使用

a.sort() 

我正在阅读的文章中应该按照我想要的方式对其进行排序,但它返回了错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

【问题讨论】:

  • 阅读错误...看看它说了什么。这很清楚。如果不是,请谷歌它。然后问这个问题。

标签: python arrays list sorting


【解决方案1】:

显式指定key函数参数,这样只有第一项;使int 对象用作排序键:

>>> a = [(1, array([1,2,3])), (2, array([1,3,2])), (4, array([1,3,3]))]
>>> a.sort(key=lambda x: x[0])
>>> a
[(1, array([1, 2, 3])), (2, array([1, 3, 2])), (4, array([1, 3, 3]))]

【讨论】:

  • 请注意:作者的'list'实际上是一个元组,没有sort属性。
  • @timgeb,问题标题提到list
  • @falsetru 只需将您的答案更改为使用 sorted 内置函数,因为它适用于任何容器或可迭代类型。
  • @falsetru 是的,我只是认为作者不知道元组的区别。
【解决方案2】:

您可以告诉sorted 使用 lambda 表达式按第一个元素排序:

>>> from numpy import array
>>> a = ((1, array([1,2,3])), (4, array([1,3,3])), (2, array([1,3,2])))
>>> a = tuple(sorted(a, key=lambda x: x[0]))
>>> a
((1, array([1, 2, 3])), (2, array([1, 3, 2])), (4, array([1, 3, 3]))

请注意,a 是一个元组,因此是不可变的。这就是为什么我将sorted 的返回值转换为一个元组并重新分配a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2018-05-15
    • 2014-10-08
    • 1970-01-01
    • 2014-04-28
    • 2011-07-16
    相关资源
    最近更新 更多