【问题标题】:Sorting a list according to the second integer [duplicate]根据第二个整数对列表进行排序[重复]
【发布时间】:2021-04-23 05:44:43
【问题描述】:

我正在尝试根据第二项对列表进行排序。我已经写出了这段代码,但它没有正确排序。

import random

d2 = []
for i in range (12):
    x = random.randint(1,100)
    y = x
    x = random.randint(1,100)
    d2.append([x,y])

我在处理这部分时遇到了问题,我需要对其进行整理。它对前两个列表进行排序,但随后停止工作。我的代码有什么问题?

def sortlist(A):
    l = len(A)
    for i in range(0, l):
        for j in range(0, l-i-1):
            if (A[j][1] > A[j + 1][1]):
                tempo = A[j]
                A[j]= A[j + 1]
                A[j + 1]= tempo
                return A

A = d2
print(sortlist(A))

【问题讨论】:

  • 你可以创建一个与第一个相同但删除第一个项目的新列表,然后对其进行排序并将其附加到第一个现有项目的列表中吗?
  • 这能回答你的问题吗? Custom Python list sorting
  • @couka OP 确实询问如何对列表进行排序,但他们已经实现的算法有什么问题。
  • @Countour-Integral Quadri 先生搞砸了。
  • 您的return A 有错误的缩进——它应该与l = len(A) 的缩进相同。我有一个更长的答案,我正在写,直到问题结束。你也有不必要的任务——看看你自己能不能找到它们。

标签: python list sorting


【解决方案1】:

您可以使用 Python 的 sorted,并设置您的自定义 key 函数来指定列表元素的排序依据。

# sort the list based on each element's second integer (elem[1])
sorted(d2, key=lambda elem: elem[1])

【讨论】:

    【解决方案2】:

    您可以使用sortsortedkey 参数来按该键排序。在这种情况下您需要的密钥是itemgetter(1),例如:

    import operator
    
    data = [('a', 5), ('b', 4), ('c', 7), ('d', 6)]
    data.sort(key=operator.itemgetter(1))
    
    # data is now [('b', 4), ('a', 5), ('d', 6), ('c', 7)]
    

    顺便说一句,operator.itemgetter(1)lambda x: x[1] 做同样的事情。

    【讨论】:

      【解决方案3】:

      你追求的是这样的吗?

      list1 = [10, 5, 2, 3]
      list2 = list(list1)
      del list2[0]
      list2.sort()
      
      for i in range(0, len(list2)):
          list1[i+1] = list2[i]
      
      print(list1)
      

      输出:[10, 2, 3, 5]

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多