我有一個list of words我想sort在串列中的:
words = ["yo", "act", "flop",'tac']
words = list(map(sorted,words))
Desired outcome: ['oy','act','flop','act']
上面將單詞中的每個單詞拆分為單個字符 - 但確實對其進行了排序:
- 為什么這樣做?因為我們只是在排序?
- 我怎樣才能重新加入它們,使它們再次成為單詞而不是單個字符?我知道它正在使用
"".join(),但我似乎無法圍繞上述內容進行包裝!
謝謝!
uj5u.com熱心網友回復:
sorted適用于任意可迭代值,但總是回傳一個串列,而不是它剛剛排序的相同可迭代值的值。
>>> sorted("yo")
['o', 'y']
這意味著您必須將排序后的串列自己轉換回字串。
>>> [''.join(sorted(x)) for x in words]
['oy', 'act', 'flop', 'act']
您仍然可以使用map,但它比僅使用串列理解要麻煩一些:
>>> list(map(lambda x: ''.join(sorted(x)), words))
['oy', 'act', 'flop', 'act']
因為 Python 本身不支持函陣列合,所以你不能寫出像
list(map(''.join ° sorted, words))
(其中°的假設運算子的行為類似于
(f ° g) == lambda x: f(g(x))
)
組合總是涉及創建一個需要呼叫的附加函式,以便呼叫原來的兩個函式,而不是創建一個單獨的單個函式,它與原來的兩個函式做同樣的事情。
另一種選擇 ( list(map(''.join, map(sorted, words)))) 也好不到哪里去;雖然map(f°g, x)通常等效于map(f, map(g, x)),但現在您要對序列進行兩次迭代(或者更確切地說,對一個序列進行迭代,然后對第二個中間序列進行迭代)。
uj5u.com熱心網友回復:
如果它還沒有名稱,則需要定義要映射到串列上的函式。
您可以使用def或定義函式lambda。
words = ["yo", "act", "flop",'tac']
def f(w):
return ''.join(sorted(w))
print( list(map(f, words)) )
# ['oy', 'act', 'flop', 'act']
print( list(map(lambda w: ''.join(sorted(w)), words)) )
# ['oy', 'act', 'flop', 'act']
uj5u.com熱心網友回復:
您還可以在 map 函式呼叫中使用 join:
words = list(map(lambda x: "".join(sorted(x)),words))
print(words)
>>> ['oy', 'act', 'flop', 'act']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362887.html
