提问者:小点点

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


我有一个列表“distancechunks”里面有90个列表。 这90个列表中的每一个都包含两个元组(见图)。 我想按第一个元组排序每个列表(共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'

不幸的是,我不确定如何实现这个错误。。。

以下是“距离chunks”列表的摘录:

[[(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])),


共1个答案

匿名用户

您的第二次尝试接近,您只需要对每个子列表进行排序。

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

我不知道为什么在已经有浮点数的情况下还要尝试转换为int。