python - 使用不带 `key` 的 `reverse=True` 参数按降序对字符串列表进行排序?

标签 python list sorting python-3.x

我有一个这样的列表:

fruits = ["blueberry", "peach", "applepine", "orange", "pear", "coconut", "lemon"]


我需要按照以下规则对其进行排序:

  • 名字不超过5个字母的水果在前
  • 然后,水果按逆字母顺序排序

这应该给出以下列表:

sorted_fruits = ["pear", "peach", "lemon", "orange", "coconut", "blueberry", "applepine"]

我想对包含字符串的列表应用反向字母排序,但我不能使用可选参数 reverse=True 因为这个条件在我的排序优先级中排在第二位,所以我必须使用lambda 函数和 key 参数。

我该如何处理?

我知道通常我们可以否定 int 但我不知道 string 对象的技巧,(我想 [-ord(i) for i in fruit] 但它看起来很丑)。

最佳答案

您可以“人为地”反转 key 的第一部分,以便使用 reverse=True给出了期望的结果:

sort_key = lambda f: ( len(f)<=5, f )
sorted(fruits, key = sort_key, reverse = True)

条件len(f)<=5长字符串为 0 (=False),短字符串为 1 (=True),因此长字符串在短字符串之前。然后,reverse=True纠正那个。

-- 例如:

fruits = ["blueberry", "peach", "applepine", "orange", "pear", "coconut", "lemon"]
sort_key = lambda f: ( len(f)<=5, f )
sorted(fruits, key = sort_key, reverse = True)
=> ['pear', 'peach', 'lemon', 'orange', 'coconut', 'blueberry', 'applepine']

关于python - 使用不带 `key` 的 `reverse=True` 参数按降序对字符串列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436881/

相关文章:

python - 只保留列表中唯一项的最有效方法?

java - Kotlin检查两个列表是否相同,一个列表是否具有其他元素?

c++ - 在对象列表上使用迭代器时遇到问题

python - 如果条件没有按预期返回

python - 我怎样才能反转切片?

java - 快速排序可视化?

java - 如何按第二个词对列表进行排序?

c# - 按以下结果对集合进行排序

Python异常: RuntimeError: maximum recursion depth exceeded/unprintable runtime error

python - Process.StandardOutput.Readline() 卡在 Mono 而不是 .NET