最近在和大佬沟通中,聊到一个问题:一个Python列表中既有数字又有字符串,怎么实现排序并迭代输出?
之前没研究过这个,所以想得有些简单了,原本计划是直接通过list自带的sort()方法排序后直接for循环迭代,想法如下:
list_a = [1, "b", "100", 9, 0]
for i in list_a.sort():
print(i)
但实际调试了一下,发现这个是会报错的:
TypeError: '<' not supported between instances of 'str' and 'int'
原因是sort()方法不支持同时对str和int两种不同类型的元素进行排序……
T.T
后来想了一下,想要达到目的,基本思路就是先要转成同一类型,再去排序迭代。
先去大吃大喝一顿,然后灵光一闪,方法就来了——可以把list里面的元素都转成str类型,再去做操作。这就用到了sorted()方法中的一些特性,最终实现如下:
list_a = [1, "b", "100", 9, 0]
print(sorted(list_a, key=str))
# 正序
for i in sorted(list_a, key=str):
print(i, end=" ")
print()
# 逆序
for x in sorted(list_a, key=str, reverse=True):
print(x, end=" ")
运行结果:
[0, 1, '100', 9, 'b']
0 1 100 9 b
b 9 100 1 0
附:
sorted()方法中的参数key=…还有很多其他用法——
如list中全是字符串,可以按照字符串长度进行排序,demo奉上:
# 按照字符串长度排序
list_b = ["Bob", "Williams", "Kelly", "Eric", "Mary"]
for n in sorted(list_b, key=len):
print(n, end=" ")
运行结果:
Bob Eric Mary Kelly Williams
key参数还可以接受表达式以及一些可迭代的函数,具体玩法感兴趣的朋友可以研究一下,祝大家早日成为大佬~~~