作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何对列表进行排序以结束:
['a', 'aa', 'aaa', 'A', 'AA', 'AAA', 'b', 'bb', 'bbb', 'B', 'BB', 'BBB']
为方便起见,假设它是一个随机版本:
['bb', 'a', 'B', 'BB', 'AAA', 'BBB', 'b', 'aa', 'aaa', 'A', 'AA', 'bbb']
我尝试忽略大小写进行排序:
l = sorted(l, key=lambda x: x.lower())
结果为 ['a', 'A', 'aa', 'AA', 'aaa', 'AAA']
从下面的答案来看,混合情况有两种解决方案,我不确定哪种更好。
L = ['ABC1', 'abc1', 'ABC2', 'abc2', 'Abc']
l = sorted(L, key=lambda x: "".join([y.lower() + y.swapcase() for y in x]))
print(l)
l = sorted(L, key=lambda x: [(c.lower(), c.isupper()) for c in x])
print(l)
最佳答案
您可以使用 sorted()
使用自定义键功能:
>>> L = ['bb', 'a', 'B', 'BB', 'AAA', 'BBB', 'b', 'aa', 'aaa', 'A', 'AA', 'bbb']
>>> sorted(L, key=lambda x: (x[0].lower(), x[0].isupper(), len(x)))
['a', 'aa', 'aaa', 'A', 'AA', 'AAA', 'b', 'bb', 'bbb', 'B', 'BB', 'BBB']
这是通过比较每个元素的第一个字符先小写,然后是元素的大小写,最后是它的长度来实现的。
附言要同时处理混合大小写和混合字符元素,您需要比较单个字符的元组,例如:
>>> L = ['ab', 'aA', 'bb', 'a', 'B', 'BB', 'b', 'aa', 'A', 'AA']
>>> sorted(L, key=lambda x: [(c.lower(), c.isupper()) for c in x])
['a', 'aa', 'aA', 'ab', 'A', 'AA', 'b', 'bb', 'B', 'BB']
关于Python 排序 - 半忽略大小写(a、aa、A、AA、b、bb、B、BB...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872762/
我是一名优秀的程序员,十分优秀!