如何在Python中映射为整数后避免前导零

3
我想按数字顺序排序列表。
s = [['92', '022'],['82','12'],['77','13']]

所以我使用了,

s = [list( map(int,i) ) for i in s]     

s.sort()

输出结果如下:

[[77, 13],[82, 12],[92, 22]] 

但是我希望保留那个22,即使它前面有一个零,所以我的问题是如何防止这个前导零!


你可以简单地使用 sorted(s) - Mykola Zotko
2个回答

4
你可以使用sorted和以下的key代替,这样你就避免了使用列表推导式转换实际值:
sorted(l, key = lambda x: int(x[0]))
[['77', '13'], ['82', '12'], ['92', '022']]

你也可以使用operators.itemgetter,正如@aws_apprentice所建议的那样:

sorted(l, key = lambda x: int(itemgetter(0)(x)))
[['77', '13'], ['82', '12'], ['92', '022']]

1
我喜欢在key参数内将其转换为整数的想法,而不是实际更改列表内容。这也可以使用sort实现,例如s.sort(key = lambda x: int(x[0])) - Kevin
是的,这就是@Kevin背后的想法 :-) 谢谢。 - yatu
1
最好不要使用lambda,而是从operator模块中使用itemgetter,因为lambda调用会变得昂贵。 - gold_cy
然而,这个新版本不会按数字排序,而是按字典顺序排序,没有进行整数转换。此外,它完全忽略了第二个元素。 - user2390182
我认为你们两个的考虑都是错误的。如果你不将其转换为整数,它只会考虑第一个数字,所以 110 会排在 80 前面,因为 1<8。而且 OPs 的预期输出仅使用每个列表中的第一个元素进行排序 @schwobaseggl,因此排序过程确实应该忽略第二个元素。 - yatu
显示剩余2条评论

0

key 函数的理念:将值转换为它们的排序键。因此:

def sort_key(val):
    return list(map(int, val)) 

s.sort(key=sort_key)
# [['77', '13'], ['82', '12'], ['92', '022']]

应该最接近您尝试的逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接