【问题标题】:Reversing order of a list and then sorting in lexicographical order反转列表的顺序,然后按字典顺序排序
【发布时间】:2016-06-02 00:07:27
【问题描述】:

我需要编写一个代码来对单词列表进行排序,并将它们按字典顺序从相反的顺序排列。例如,给定列表["harry", "harra", harrb"],我需要一种方法来反转每个单词,以便列表变为["yrrah", "arrah","brrah"]。然后我需要按字典顺序对其进行排序并将其反转回原来的顺序。所以它看起来像["harra", "harrb", "harry"]。我从文件'ifile'中获取单词,但对于此代码,我只订购具有一定数量字母“n”的单词。

到目前为止,这是我的代码:

def getRhymeSortedCount(n,ifile,file):
    word_list = []
    for word in ifile:
        if len(word) == n:
            word_list.append(word.strip())
    arr = word_list
    arr.sort(key = lambda x : x[::-1])
    ofile.write("\n".join(word_list))

它正确地按最后一个字母对单词进行排序,但不采用字母数 = "n" 的单词 如何更改我的 len 语句以仅获取具有 n 个字母的单词?

【问题讨论】:

  • 基本上它从每个单词的末尾按字典顺序排列,但仍将它们列为原始列表中的单词。所以它反转单词,对它们进行排序,然后再次反转它们

标签: python


【解决方案1】:

指定要排序的键为反转字符串

word_list = ["harry","harra", "harrb"]
word_list.sort(key=lambda str: str[::-1])

【讨论】:

  • 我需要它来记录包含 21,000 个单词的完整单词列表。所以不要写 word_list = ["harry", "harra", "harrb"] 我应该写什么?
  • 这取决于单词的位置。如果您从文件中获取它们,则读取该文件并将它们放在一个列表中。
  • @expertinthemaking22 您已经拥有在您自己的问题中创建列表的代码。不是你的代码?
【解决方案2】:

使用简单的 lambda 函数 -

arr = ["harry","harra", "harrb"]

arr.sort(key = lambda x : x[::-1])

print(arr)

输出 -

['harra', 'harrb', 'harry']

【讨论】:

  • 这让我得到了正确的排序,但我也需要它来排序具有“n”个字母的单词。我的 len 语句的位置错了吗?
  • 为此,您必须描述ifile 是什么。
  • 你应该问一个单独的问题。
【解决方案3】:

感觉就像你希望有人为你做作业 - 所以这里有一个答案,你必须解开一点才能理解

word_list = ['harry', 'harra', 'harrb', "ignore_me"]
[y[::-1] for y in sorted([ x[::-1] for x in word_list if len(x) == 5])]

在这里学习的东西:

  • 列表理解 [ f(x) for x in list_of_xs if expression ]​​i>
  • 您可以将字符串切片为字符列表(反之亦然)
  • sorted(mylist) 返回列表的排序版本
  • 当您在这里时,请查看 reversed(mylist),即使此处未使用它。你可以嵌套这些: reversed(sorted(mylist)) - 整洁! (但未在我的解决方案中使用)

(哦,我喜欢 lambda 答案)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多