cai*_*ing 5 python sorting list
我有一个字符串和整数列表,并希望对列表进行排序,保留这样的数字
["Hello", 1, 2, "World", 6, "Foo", 3]
Run Code Online (Sandbox Code Playgroud)
会成为
["Foo", 1, 2, "Hello", 6, "World", 3]
Run Code Online (Sandbox Code Playgroud)
简而言之,它只对列表中的字符串进行排序,而不是整数,它们保留在原位.我已经尝试使用key参数,list.sort()但没有设法实现我想要的.
谁能帮我这个?
编辑:这与链接的问题不同,因为我想保留整数的索引,而不是将它们与字符串一起排序.
编辑:这与第二个链接的问题不同,因为该问题的答案可以使用key参数解决问题,我明确声明的内容在此实例中不起作用.
Mos*_*oye 15
前几天从@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]
Run Code Online (Sandbox Code Playgroud)
单独对字符串排序并从排序的字符串创建生成器表达式.在列表理解中,从gen中交替选择对象.进出口.如果只有原始位置的项是字符串,则使用三元条件,否则,从初始列表中选择一个项(整数).
首先,像这样的异类列表的排序仅适用于Python 2.但结果并不是您需要的.
我将在已过滤列表的排序版本上创建一个迭代器(仅保留字符串),并使用此迭代器的项或原始列表重建列表,具体取决于元素类型:
l = ["Hello", 1, 2, "World", 6, "Foo", 3]
sgen = iter(sorted([x for x in l if isinstance(x,str)]))
result = [next(sgen) if isinstance(x,str) else x for x in l]
print(result)
Run Code Online (Sandbox Code Playgroud)
结果:
['Foo', 1, 2, 'Hello', 6, 'World', 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |