'a'<'b'
'a'>'B'
所以首先都变成小写吧。
然后
sorted_string=reduce(lambda
x,y:x>y
and
y+x
or
x+y,lowered_string
)
这样会失去原字符串的大小写。
如果想保留大小写,
让他们等效,恐怕需要专门定义一个函数来比较,
一个lambda搞不定。
------------------
看错了,是排序英文名,也是同样的方法,把每个名字第一字符拿出来比较就行了。
#--encoding:utf-8--def sortName(list):
nameMap ={}
#保存第一个字母并稍后进行排序
nameList =[]
for i in list:
nameMap[i[0]] = i
nameList.append(i[0])
nameList.sort()
for i in nameList:
print(nameMap[i])
if __name__ == '__main__':
list = ['Michael jack','Bill Cliton','Tony']
sortName(list)
运行结果:
Bill Cliton
Michael jack
Tony
汗 ,还有第二个字母,没看清。。不过原理一样的,map中key保存两个字母,就行了
修改后
#--encoding:utf-8--
def sortName(list):
#保存名字和第一个字母的map
nameMap ={}
#保存第一个字母并稍后进行排序
nameList =[]
for i in list:
len = i.find(' ')
str = i[0]
if(len >0):
str = i[0]+i[len+1]
print str
nameMap[str] = i
nameList.append(str)
nameList.sort()
for i in nameList:
print(nameMap[i])
if __name__ == '__main__':
list = ['Michael jack','Michael cack','Michael zack','Bill Cliton','Tony']
sortName(list)
结果:
Bill Cliton
Michael cack
Michael jack
Michael zack
Tony