我想排序順序小寫字符串「sOrTiNg1234」 - >大寫 - > NUMS與拉姆達(蟒蛇)排序
我做
string = sorted(input(), key = lambda c: (c.isdigit(), c.isupper(),c.islower()))
我不得不這樣做的鑰匙至於看起來是對的。例如,我首先想要檢查它是否是一封信,然後我想檢查它是否是小寫,然後檢查它是否是大寫。然而,完全相反似乎工作。
有人可以解釋鍵的工作與排序?
多謝
我想排序順序小寫字符串「sOrTiNg1234」 - >大寫 - > NUMS與拉姆達(蟒蛇)排序
我做
string = sorted(input(), key = lambda c: (c.isdigit(), c.isupper(),c.islower()))
我不得不這樣做的鑰匙至於看起來是對的。例如,我首先想要檢查它是否是一封信,然後我想檢查它是否是小寫,然後檢查它是否是大寫。然而,完全相反似乎工作。
有人可以解釋鍵的工作與排序?
多謝
正如簡要評論暗示,問題是,True == 1
和False == 0
,因此True
實際上是後False
。所以,如果你把鑰匙放在了「直觀」的順序,你會得到這樣的:
>>> s = 'sOrTiNg1234'
>>> sorted(s, key = lambda c: (c.islower(), c.isupper(), c.isdigit()))
['1', '2', '3', '4', 'O', 'T', 'N', 's', 'r', 'i', 'g']
這可能會成爲一個更清楚一點由具有看看關鍵元組:
>>> [(c, map(int, (c.islower(), c.isupper(), c.isdigit()))) for c in s]
[('s', [1, 0, 0]),
('O', [0, 1, 0]),
('r', [1, 0, 0]),
('T', [0, 1, 0]),
('i', [1, 0, 0]),
('N', [0, 1, 0]),
('g', [1, 0, 0]),
('1', [0, 0, 1]),
('2', [0, 0, 1]),
('3', [0, 0, 1]),
('4', [0, 0, 1])]
可以解決這個問題通過使用reverse
參數:
>>> sorted(s, key = lambda c: (c.islower(), c.isupper(), c.isdigit()), reverse=True)
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
或者,像你一樣,通過在關鍵的元組扭轉值:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper(), c.islower()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
或者通過否定的專用密鑰(not
作品,太):
sorted(s, key = lambda c: (-c.islower(), -c.isupper(), -c.isdigit()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
還要注意的是使用lower
和upper
實際上是多餘的:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
如果你也想按字符本身排序,將其添加到元組的尾部:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper(), c))
['g', 'i', 'r', 's', 'N', 'O', 'T', '1', '2', '3', '4']
'c.islower()'是多餘的,表達式'sorted(s,key = lambda c:(c.isdigit(),c.isupper(),c))'OK – gboffi
我做了什麼,是我映射的所有字母數字字符somenumbers
較小的情況下,字母從0映射到25由較小的情況下字母的ASCII值減去97 。
通過減去65(ord('A'))並將小寫字母的ascii值加上26,類似地將較大的大寫字母從26映射到51。
類似數字值由從數字字符
Afterr做所有這每個字符指向somenumber ASCII值減去48(ORD(「0」)從52映射到61,而且所有字符是根據排序那些numbers.And最終排序列表後,我參加了所有字符
def function(alpha) :
if alpha.islower():
return ord(alpha)-97 #from a(0) to z(25)
elif alpha.isupper():
return ord(alpha)-65+(26) #from A(26) to Z(51)
else:
return ord(alpha)-48+(52) #from 0(52) to 9(61)
x="sOrTiNg1234"
y=list(x)
y=sorted(y,key=function)
answer=''.join(y)
我希望這是有道理的:)
'False
user2357112
@ user2357112這可以簡化爲「真」。 –
@ user2357112啊,這很有道理。如你所說,感謝 – Flyrom