Python列表中既有数字又有字符串,怎么实现排序并迭代输出?

最近在和大佬沟通中,聊到一个问题:一个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参数还可以接受表达式以及一些可迭代的函数,具体玩法感兴趣的朋友可以研究一下,祝大家早日成为大佬~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值