【问题标题】:Python sort one list from another list [duplicate]Python从另一个列表中排序一个列表[重复]
【发布时间】:2013-12-29 03:37:05
【问题描述】:

我已经在这个程序上工作了一段时间,但不知道如何从第二个列表中的内容中对我的一个列表进行排序。对于这个程序,我有一个单词列表,还有一个单词在我打开的文件中出现的次数的列表。我需要根据单词的频率降序对单词列表进行排序。我必须根据分配编写一个单独的函数来执行此操作。我有一个给类使用的函数,但它只对一个列表进行排序。这是我拥有且需要修改的功能:

def selectionsort(mylist):
    for i in range(len(mylist)):
       max_i = i
       for j in range( i + 1, len(mylist) ):
           if mylist[j] > mylist[max_i]:
                max_i = j
       temp = mylist[max_i]
       mylist[max_i] = mylist[i]
       mylist[i] = temp

我目前有两个如下所示的列表:

mylist = ["the", "cat", "hat", "frog"]
frequency = [4, 1, 2 ,1]       

4是“the”的频率,1是“cat”的频率,以此类推。

我的目标是让 mylist 像这样排序:

 mylist = ["the", "hat", "cat", "frog"]

我应该如何修改我拥有的函数,以便使用频率列表中的相应值对mylist 进行排序?

我正在使用 Python 3.3

【问题讨论】:

  • 从 2 个列表开始。每当您交换时,请记住交换两个列表中的相同位置。此外,pythonic 方法是压缩列表,使用其中一个元素对其进行排序,然后将其他项目作为结果。

标签: python list sorting python-3.x


【解决方案1】:

给你!使用sortedzip

sortedlist = [i[0] for i in sorted(zip(mylist, frequency), key=lambda l: l[1], reverse=True)]

这是一个小演示:

>>> mylist
['the', 'cat', 'hat', 'frog']
>>> frequency = [4, 1, 3, 2]
>>> sortedlist = [i[0] for i in sorted(zip(mylist, frequency), key=lambda l: l[1], reverse=True)]
>>> sortedlist
['the', 'hat', 'frog', 'cat']

希望这会有所帮助!

【讨论】:

  • 虽然正确,但 OP 想修改他的代码,而不是完全替换它。检查我在问题下方的评论。
  • @Thrustmaster /sigh。你是对的,但是自己做比修理别人容易得多。哈哈哈。等一下
  • 正是我评论的原因。推出我们的代码要容易得多,但它很少能帮助那些想要学习并知道他的代码有什么问题的人:)
  • @aIKid 这个答案是错误的,因为它不是 OP 要求的。
  • @SašaŠijak 不。这仍然是一个有效的答案,因为它解决了他的需求。
【解决方案2】:
def selectionsort(mylist, frequences):
    for i in range(len(mylist)):
       max_i = i
       for j in range( i + 1, len(mylist) ):
           if frequences[j] > frequences[max_i]:
                max_i = j
       temp = mylist[max_i]
       mylist[max_i] = mylist[i]
       mylist[i] = temp
       temp = frequences[max_i]
       frequences[max_i] = frequences[i]
       frequences[i] = temp

您只需将频率列表合并到函数中并比较其值而不是 mylist 值,然后将其值与 mylist 值交换。

【讨论】:

    【解决方案3】:
    zip(*sorted(zip(frequency, mylist))[::-1])[1]
    

    【讨论】:

      【解决方案4】:
      mylist = ["the", "cat", "hat", "frog"]
      frequency = [4, 1, 2 ,1]
      adict = dict(zip(mylist, frequency))
      sorted(mylist, key = lambda x:adict[x], reverse = True)
      

      略有不同的版本。我相信它比第一个答案更简单,虽然更昂贵(通过制作新的字典)。

      【讨论】:

        猜你喜欢
        • 2014-05-28
        • 2013-09-12
        • 1970-01-01
        • 2022-12-22
        • 1970-01-01
        • 2013-09-17
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多