Python 不区分大小写对字符串列表排序

任务:
你想对一个字符串列表排序,并忽略掉大小写信息。举个例子,你想要小写的a排在大写的B前面。默认的情况下,字符串比较大小写敏感的(比如所有的大写字符排在小写字符之前)。
解决方案:
string_list = ['d','s','a','i','j','A','S','D','U','N']
auxiliary_list = [(x.lower(), x) for x in string_list]
print auxiliary_list
 
auxiliary_list.sort()
print auxiliary_list
 
new_list = [x[1] for x in auxiliary_list]
print new_list
输出:
[('d', 'd'), ('s', 's'), ('a', 'a'), ('i', 'i'), ('j', 'j'), ('a', 'A'), ('s', 'S'), ('d', 'D'), ('u', 'U'), ('n', 'N')]
[('a', 'A'), ('a', 'a'), ('d', 'D'), ('d', 'd'), ('i', 'i'), ('j', 'j'), ('n', 'N'), ('s', 'S'), ('s', 's'), ('u', 'U')]
['A', 'a', 'D', 'd', 'i', 'j', 'N', 'S', 's', 'U']
Python 2.4已经提供了对DSU(decorate-sort-undecorate)的原生支持,因此(假设str_list的元素都是真正的普通字符串,而不是Unicode对象之类),可以用更简单更快的方式:
new_list = sorted(str_list, key=str.lower)
print new_list
输出:
['a', 'A', 'd', 'D', 'i', 'j', 'N', 's', 'S', 'U']

讨论:
DUS方法创建了一个辅助列表,每个元素都是元组,元组的元素则来自原列表并被当作"键"处理。这个排序是基于键的排序,因为Python的元组排序比较是根据条目顺序进行的(比如,它会首先比较元组的第一个元素)。要将一个长度为n的字符串列表排序,配合DSU的使用,lower方法只需要被调用n次,因而在第一步,decorate阶段,以及最后阶段,undecorate阶段节省了很多时间。


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值