【发布时间】:2018-01-14 10:01:55
【问题描述】:
本题其实改编自one previously asked by Mat.S(image)。虽然被删了,但我觉得这个问题问得很好,所以我把它的要求和我自己的解决方案重新发布。
给定一个字母和数字的列表,说
['a', 2, 'b', 1, 'c', 3]
要求是数字升序,字母降序,不改变字母和数字的相对位置。我的意思是如果未排序的列表是:
[L, D, L, L, D] # L -> letter; # D -> digit
那么,排序后的列表也一定是
[L, D, L, L, D]
字母和数字不一定以规则模式交替出现 - 它们可以以任意顺序出现
排序后 - 数字升序,字母降序。
所以对于上面的例子,输出是
['c', 1, 'b', 2, 'a', 3]
另一个例子:
In[]: [5, 'a', 'x', 3, 6, 'b']
Out[]: [3, 'x', 'b', 5, 6, 'a']
什么是这样做的好方法?
【问题讨论】:
-
@cᴏʟᴅsᴘᴇᴇᴅ:为了阻止那些不理解本网站鼓励自我回答的人,我过去曾在我的问题下发表评论:PS。有些人可能认为我在发布后立即回答我自己的问题是错误的。在投票之前,请阅读It's OK to Ask and Answer Your Own Questions。
-
@Jean-FrançoisFabre 哈哈,依稀记得那个。是的,它有点相似。猜猜我无意中从那里学到了另一个技巧。
-
@MartijnPieters 好吧,我不想给人留下我不想从社区获得进一步意见的印象,所以我没有发布答案。但是你帮助我更好地理解了,所以谢谢你!
标签: python list sorting list-comprehension