当前位置: 首页 > 面试题库 >

根据Python中的自定义字母对字符串值进行排序

呼延英奕
2023-03-14
问题内容

我正在寻找一种有效的方法来根据自定义字母对字符串列表进行排序。

例如,我有一个字符串字母,它是"bafmxpzv"一个仅由该字母中包含的字符组成的字符串列表。

我想要一种类似于其他常见排序方式对列表进行排序的方法,但是使用此自定义字母。我怎样才能做到这一点?


问题答案:

让我们创建一个字母和一个单词列表:

In [32]: alphabet = "bafmxpzv"

In [33]: a = ['af', 'ax', 'am', 'ab', 'zvpmf']

现在让我们根据字母在其中出现的位置进行排序alphabet

In [34]: sorted(a, key=lambda word: [alphabet.index(c) for c in word])
Out[34]: ['ab', 'af', 'am', 'ax', 'zvpmf']

上面按正确的顺序排序。

sorted支持广泛的自定义排序。该sorted函数有三个可选参数cmpkey以及reverse

  • cmp适用于复杂的排序任务。如果指定,cmp应该是一个带有两个参数的函数。它应返回负数,零数或正数,具体取决于第一个自变量是否小于,等于或大于第二个自变量。对于这种情况,cmp是矫kill过正。

  • key,如果经过了精化,应该是一个带有一个参数并返回python本身知道如何排序的函数。在这种情况下,key返回字母中每个单词字符的索引列表。

在这种情况下,key返回中的字母索引alphabet

  • reverse,如果为true,则反转排序顺序。

无效的选择

从评论中,提到了这种替代形式:

In [35]: sorted(a, key=lambda word: [alphabet.index(c) for c in word[0]])
Out[35]: ['af', 'ax', 'am', 'ab', 'zvpmf']

请注意,此排序顺序不正确。这是因为key此处的功能仅考虑每个单词的首字母。这可以通过测试来证明key

In [2]: key=lambda word: [alphabet.index(c) for c in word[0]]

In [3]: key('af')
Out[3]: [1]

In [4]: key('ax')
Out[4]: [1]

注意,key对于两个不同的字符串af和,它返回相同的值ax。返回的值仅反映每个单词的第一个字符。因此,sorted无法确定af之前的归属ax



 类似资料:
  • 问题内容: 有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序? 因此对于: 我想返回: 问题答案: 你可以做:

  • 问题内容: 我在排序包含整数的字符串时遇到问题。如果使用下面的代码,我将进行排序:1some,2some,20some,21some,3some,一些 但是我希望将其排序为:1some,2some,3some,20some,21some,一些 我怎样才能做到这一点? 谢谢! 问题答案: 这是有关如何执行此操作的独立示例(未特别优化): 输出量 说明 该示例使用一个常数来推断数字是否位于的起始位置。

  • 问题内容: 我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。 我对字符串排序有问题。我的应用程序的语言带有变音符号,它们具有特定的字母顺序。例如,直接在after之后,在after之后,等等。因此,您应该对字符串进行如下排序: ElasticSearch首先按典型字母排序,然后将所有奇怪的字母移到最后: 我可以为Elasti

  • 示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会

  • 我有一个字符串例如: 这需要排序为 它基于方括号内的字符串。 我如何在java中做到这一点?

  • 问题内容: 我有一个字典列表,希望每个项目都按特定的属性值排序。 考虑下面的数组, 当排序name,应该成为 问题答案: 使用密钥而不是cmp看起来更干净: 或如JFSebastian和其他人所建议的, 为了完整性(如fitzgeraldsteele的评论中指出的那样),请添加reverse=True降序排列

  • 问题内容: 我有一个数组: 如果使用,则输出为: 但是我需要实现以下排序: 我想我需要实现和重写方法: 我应该如何解决这个问题? 问题答案: 您还可以添加: 如果数组不区分大小写。 显然,OP不仅要比较字母,还希望比较字母字符串,所以比较复杂:

  • 本文向大家介绍Python对字符串列表进行排序,包括了Python对字符串列表进行排序的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到如何对字符串列表进行排序。我们将使用sort方法和sorted函数对给定的字符串列表进行排序。然后,我们将了解如何根据不同的条件(例如长度,值等)对字符串列表进行排序, 让我们看看如何使用list.sort方法对字符串列表进行排序。排序方法列表是一个