按第一个值对具有元组的列表列表进行排序

时间:2020-07-06 14:28:41

标签: python list sorting tuples

我有一个列表“ distancechunks”,里面有90个列表。这90个列表中的每个列表都包含2个元组(见图)。我想按第一个元组(图像中突出显示的黄色)对每个列表(总共90个)进行排序。因此,每个列表的顺序从低到高。数组值(第二个元组)不应该排序,只需保持左边的相同值即可。

我尝试了.sort()之类的经典方法,并使用lambda等进行了排序:

for x in distancechunks:
    for i in x:
        lst2 = sorted(i)
        print(lst2)

但是,我总是收到不同的错误消息,例如:

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

或者我尝试过:

vallah = distancechunks

vallah.sort(key=lambda x: int(x[0]))
vallah

并获得错误消息:

int() argument must be a string, a bytes-like object or a number, not 'tuple'

不幸的是,我不确定如何实现此错误...

以下是“ distancechunks”列表的摘录:

[[(0.6164414002968976, array([6.2, 2.8, 4.8, 1.8])),
  (1.5132745950421556, array([5.7, 2.8, 4.1, 1.3])),
  (0.648074069840786, array([6. , 3. , 4.8, 1.8])),
  (0.8124038404635961, array([6.5, 2.8, 4.6, 1.5])),
  (0.6480740698407862, array([6.3, 2.9, 5.6, 1.8])),
  (4.497777228809803, array([4.8, 3. , 1.4, 0.1])),
  (0.5291502622129182, array([6.1, 3. , 4.9, 1.8])),
  (1.1445523142259595, array([6.2, 2.9, 4.3, 1.3])),
  (0.4242640687119287, array([6.7, 3. , 5.2, 2.3])),
  (1.4866068747318506, array([7.3, 2.9, 6.3, 1.8])),
  (0.6480740698407865, array([6.7, 3.3, 5.7, 2.1])),
  (2.135415650406262, array([5.7, 2.6, 3.5, 1. ])),
  (0.7416198487095664, array([6.3, 2.5, 5. , 1.9])),
  (0.6782329983125268, array([6.7, 3.1, 5.6, 2.4])),
  (0.9055385138137417, array([6.3, 2.5, 4.9, 1.5])),
  (4.135214625627066, array([5. , 3.4, 1.6, 0.4])),
  (4.050925820105819, array([4.8, 3.4, 1.9, 0.2])),
  (4.451965857910412, array([4.6, 3.1, 1.5, 0.2])),
  (1.6792855623746663, array([5.8, 2.7, 3.9, 1.2])),
  (1.4071247279470291, array([7.4, 2.8, 6.1, 1.9])),
  (0.6999999999999996, array([5.9, 3.2, 4.8, 1.8])),
  (0.7549834435270752, array([6.5, 3. , 5.8, 2.2])),
  (4.22965719651132, array([5.3, 3.7, 1.5, 0.2])),
  (4.3, array([5. , 3.4, 1.5, 0.2])),
  (4.3977266854592045, array([5. , 3.6, 1.4, 0.2])),
  (0.8366600265340757, array([6.8, 2.8, 4.8, 1.4])),
  (0.9055385138137422, array([6.8, 3.2, 5.9, 2.3])),
  (0.46904157598234314, array([6.4, 3.1, 5.5, 1.8])),
  (4.266145801540308, array([5.1, 3.4, 1.5, 0.2])),
  (1.8734993995195195, array([5.5, 2.3, 4. , 1.3]))],
 [(1.1575836902790229, array([7.2, 3.2, 6. , 1.8])),
  (2.692582403567252, array([5. , 2. , 3.5, 1. ])),
  (2.0976176963403037, array([7.7, 3.8, 6.7, 2.2])),
  (3.972404813208241, array([5.1, 3.3, 1.7, 0.5])),
  (0.4242640687119286, array([6.7, 3. , 5. , 1.7])),
  (4.262628297189423, array([5.1, 3.8, 1.5, 0.3])),

enter image description here

1 个答案:

答案 0 :(得分:2)

您的第二次尝试即将结束,您只需要对每个子列表进行排序。

for chunk in distancechunks:
    chunk.sort(key=lambda x: x[0])

我不确定为什么已经有浮点数时为什么要尝试将其转换为int。

相关问题