gpt4 book ai didi

Python 排序 - 半忽略大小写(a、aa、A、AA、b、bb、B、BB...)

转载 作者:太空狗 更新时间:2023-10-29 22:05:20 30 4
gpt4 key购买 nike

如何对列表进行排序以结束:

['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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com