簡體   English   中英

如何根據字符串對列表進行排序?

[英]How to sort the list based on the string?

在這里,我嘗試根據一個字符串對字符串列表進行排序,在這里是我的測試用例,

第一種情況:

par_str = "abcd"
list_str = ['bb','ba','ab']

sorted(list_str, key=par_str)

輸出: ['ab','ba','bb']

第二種情況:

par_str = "bacd"
list_str = ['bb','ba','ab']

sorted(list_str, key=par_str)

輸出: ['bb','ba','ab']

從第一種情況開始,列表順序基於par_str字符串更改。 並且第二個測試用例的列表順序沒有變化,因為它具有相同的優先級。 那么如何寫上面的邏輯。 我已經嘗試過,但遇到錯誤TypeError: 'str' object is not callable

在字符和等級之間進行映射,並在key功能中使用該信息。

>>> par_str = "abcd"
>>> order = {c:i for i, c in enumerate(par_str)} # <------------
>>> order
{'a': 1, 'c': 2, 'b': 0, 'd': 3}
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s: [order[c] for c in s])
['ab', 'ba', 'bb']

>>> par_str = "bacd"
>>> order = {c:i for i, c in enumerate(par_str)} # <-----------
>>> order
{'a': 1, 'c': 2, 'b': 0, 'd': 3}
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s: [order[c] for c in s])
['bb', 'ba', 'ab']
>>> par_str = "abcd"
>>> list_str = ['bb','ba','ab']
>>> 
>>> def key_func(s):
...     return [par_str.index(i) for i in s]
... 
>>> sorted(list_str, key=key_func)
['ab', 'ba', 'bb']
>>> par_str = "bacd"
>>> sorted(list_str, key=key_func)
['bb', 'ba', 'ab']

如果par_str足夠長,則值得在@falsetru的答案中使用helper dict

如果您希望能夠測試關鍵功能,則最好使用完整的函數定義而不是lambda。

這是使按鍵功能真正快速的一個小技巧。 (字典與@falsetru的字典有細微的差別)

>>> par_str = "abcd"
>>> list_str = ['bb','ba','ab']
>>> sorted(list_str, key=lambda s, trans={ord(c): i for i, c in enumerate(par_str)}:s.translate(trans))
['ab', 'ba', 'bb']
>>> par_str = "bacd"
>>> sorted(list_str, key=lambda s, trans={ord(c): i for i, c in enumerate(par_str)}:s.translate(trans))
['bb', 'ba', 'ab']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM