我想使用python按字母顺序对给定的字符串数组进行排序,但首先应出现小写字。
一个例子:
#!/usr/local/bin/python2.7
arr=['A','e','a','D','f','B']
arr.sort()
for s in arr: print s
输入:
A
e
a
D
f
B
输出(当前):
A
B
D
a
e
f
输出(应该):
a
e
f
A
B
D
答案 0 :(得分:7)
要对单词进行排序,而不仅仅是字母,只需交换大小写:
>>> words = ['alpha', 'Alpha', 'aLpha', 'Bravo', 'bRavo']
>>> sorted(words)
['Alpha', 'Bravo', 'aLpha', 'alpha', 'bRavo']
>>> sorted(words, key=str.swapcase)
['alpha', 'aLpha', 'bRavo', 'Alpha', 'Bravo']
答案 1 :(得分:6)
使用自定义密钥方法检查项目是否不是.lower()
,然后比较项目本身。对于'A'
,'D'
和'B'
not x.islower()
将返回True
,而其他False
将返回True > False
个较小的案例项将首先出现:
>>> arr = ['A','e','a','D','f','B']
>>> arr.sort(key=lambda x:(not x.islower(), x))
>>> arr
['a', 'e', 'f', 'A', 'B', 'D']
答案 2 :(得分:3)
我们可以使用string.ascii_letters
获取每个字母的索引以对其进行排序。
arr = ['A','e','a','D','f','B']
import string
print sorted(arr, key=string.ascii_letters.index)
结果:
['a', 'e', 'f', 'A', 'B', 'D']
或者,如果您想对原始arr
列表进行排序,请使用sort
内置函数。
arr.sort(key=string.ascii_letters.index)
print arr
如果arr
列表中包含单词而非单个字母或字母,我们可以使用str.swapcase
arr = ['Abc', 'abc', 'aBc']
print sorted(arr, key=str.swapcase)
收率:
['abc', 'aBc', 'Abc']
答案 3 :(得分:1)
有些时间表明,对于单个字符的排序,创建一个字典实际上是最有效的:
python2.7:
from string import ascii_letters
d = {b:a for a, b in enumerate(ascii_letters)}
In [34]: timeit sorted(s, key=str.swapcase)
10 loops, best of 3: 32.6 ms per loop
In [35]: timeit sorted(s,key=lambda x: (not x.islower(),x))
10 loops, best of 3: 51.4 ms per loop
In [37]: timeit (sorted(s ,key=d.get))
10 loops, best of 3: 22.4 ms per loop
Python3.4:
In [4]: timeit sorted(s,key=lambda x: (not x.islower(),x))
10 loops, best of 3: 57.7 ms per loop
In [5]: timeit sorted(s, key=str.swapcase)
10 loops, best of 3: 41.2 ms per loop
In [6]: timeit (sorted(s ,key=d.get))
10 loops, best of 3: 21.1 ms per loop
答案 4 :(得分:0)
给定:字母数字字符串
目标:按规则排序
然后是数字(甚至是第一个,最后一个奇数)(最不重要)。
def func(l):
if l.islower():
return ord(l) - 32
elif l.isupper():
return ord(l) + 32
elif l.isdigit():
if int(l) % 2 == 0:
return ord(l) + 200
else:
return ord(l) + 100
print(*sorted(st, key=func), sep='')
答案 5 :(得分:0)
使用 python 3.9
arr=['A','e','a','D','f','B']
arr.sort(key=lambda x: (x.isupper(), x))
arr
输出
['a', 'e', 'f', 'A', 'B', 'D']
注意 - 使用排序方法时
异常不会被抑制 - 如果任何比较操作失败,则整个排序操作都将失败(并且列表可能会处于部分修改状态)。
arr=['A','e','a','D','f','B']
sorted_arr = sorted(arr, key=lambda x: (x.isupper(), x))
sorted_arr
输出
['a', 'e', 'f', 'A', 'B', 'D']