我有一个字符串和整数列表,我想对列表进行排序,像这样保留数字
["Hello", 1, 2, "World", 6, "Foo", 3]
会变成
["Foo", 1, 2, "Hello", 6, "World", 3]
简而言之,它只对列表中的字符串进行排序,而不是留在原地的整数。我已经尝试将 key
参数与 list.sort()
一起使用,但未能实现我想要的效果。
谁能帮我解决这个问题?
编辑:这与链接的问题不同,因为我想保留整数的索引,而不是将它们与字符串一起排序。
编辑:这与第二个链接问题不同,因为该问题的答案可以使用 key
参数解决问题,我已明确说明的内容在这种情况下不起作用。
最佳答案
前几天从@JonClements 那里学到了这个很酷的技巧。
这里是:
gen = iter(sorted([x for x in lst if isinstance(x, str)]))
new_lst = [next(gen) if isinstance(x, str) else x for x in lst]
print(new_lst)
# ['Foo', 1, 2, 'Hello', 6, 'World', 3]
分别对字符串进行排序,并根据排序后的字符串创建生成器表达式。在 list comprehension 中,从 gen 中交替选择对象。 exp.如果只有原始位置的项目是字符串,则使用三元条件,否则,从初始列表中选择一个项目(整数)。
关于python - 如何对列表进行排序,只对字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685760/