python - 如何对列表进行排序,只对字符串进行排序?

标签 python list sorting

我有一个字符串和整数列表,我想对列表进行排序,像这样保留数字

["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/

相关文章:

python - 在 Python 2.3 中按项目频率对列表列表进行排序

javascript - 在 JavaScript 中对 JSON 对象中的前三个字符进行字母数字排序

python - 将标准 python 键值字典列表转换为 pyspark 数据框

python - 将(设置)应用于 Pandas 数据框中的两列

java - 修改 ""类,以便 toString 方法对列表进行排序

c# - 合并 k 个排序列表不适用于负值 C#

arrays - 提取数组头并保持其顺序

python - 简单的 Python Docker 脚本

python - 基于多索引的多个级别有效地连接两个数据帧

string - Haskell:将输入字符串直接转换为列表