推 qsort:z=zip(pos,str); z.sort(lamdb key:key[0]); 04/11 01:55
→ qsort:print "".join([s[1] for s in z]) 04/11 01:55
幫qsort整理一下,原推應該是寫成如下(丟到編輯器會比較適合閱讀):
# 以下使用python2.x的語法
str=raw_input("string:") # 假設為abc
pos=raw_input("possition:") # 假設為312
z = zip(str,pos)
# ^^^^^^^^^^^
# z會是一個list,它的元素是pos對應str的tuple如下:
# [('a', '3'), ('b', '1'), ('c', '2')]
z.sort(key= (lambda key:key[1]) )
# ^^^^^^^^^^^^^^^^^^^
# key需要一組函數做排序的條件,也就是上面標記的部份
# 而被該函數引入的key就是z的每一個元素
# 所以最後z的排序結果會依據['3','1','2']的排序結果
print "".join([s[0] for s in z])
# 將z最後排序的結果抽出來並合併
個人覺得qsort寫的方法更符合原PO提的問題
原PO的問題是「依據密碼做排序」,而這正就是zip(...).sort(key = FUNCTION)在做的事
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.28.210
推 lions06:不好意思 我試了一下 跑不出來耶 是版本的問題嗎?~"~ 04/11 14:25
→ lions06:我用的是python3.1IDLE 04/11 14:26
推 ya790206:是版本問題 04/11 14:54
推 qsort:謝謝apua幫忙解釋。 04/11 19:00
→ qsort:p3k請加一行 z=zip(str,pos); z=tuple(zip); 把zip轉成tuple 04/11 19:02
推 qsort:寫錯了,轉成list才是 l=list(z) 04/11 19:19
※ 編輯: apua 來自: 59.104.29.51 (04/12 00:18)