我有一个这样的列表:
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/