基于字符串Python对列表进行排序

Luk*_*lor -1 python sorting string list

我希望列表按照排序(列表)方法排序,但需要按字符串排序.我的意思是,不是按'abcdefghijklmnopqrstuvwxyz'排序,而是能够控制它.比如,按照'zyabxwcdvueftsghrqijpoklmn'的顺序排序,但是根据您输入的任何26个字母的字符串进行排序.我该怎么做?

sorted(list)方法将列表按字母顺序排序.如果我想要反向字母顺序,那也是相当简单的.但是说我想要一个完全自定义的字母优先权?默认值按顺序对列表进行排序'abcdefghijklmnopqrstuvwxyz'.如果我可以输入字符串,如果我可以'zyabxwcdvueftsghrqijpoklmn'根据此优先级对列表进行排序,该怎么办?所以,给定['moose', 'apple', 'zebra', 'penguin']和字符串'zyabxwcdvueftsghrqijpoklmn',我会得到['zebra', 'apple', 'penguin', 'moose'],因为字母出现在字符串中的顺序.

Hug*_*ell 5

def make_sort_key(key_string):
    # make index
    index = {}
    for i,ch in enumerate(key_string):
        index[ch] = i
    # sort any char not in index following any char in index
    omitted = len(index)
    val = index.get

    def key_fn(s):
        return [val(ch, omitted) for ch in s]

    return key_fn
Run Code Online (Sandbox Code Playgroud)

然后

items = [
    "abcde",
    "fghij",
    "fghde"
]

items.sort(key = make_sort_key("gfiabdcej"))
Run Code Online (Sandbox Code Playgroud)

结果是

['fghij', 'fghde', 'abcde']
Run Code Online (Sandbox Code Playgroud)

  • @MalikBrahimi - 这个答案比你的更多,正确地实现了词法排序.在'['fghde','fghij','abcde']`上用`"gfiabdcej"作为排序字符串进行测试 - 正确的排序会将`fghij`放在`fghde`之前.它也更高效,虽然这对我们在这里看到的数据类型无关紧要 - 字典上的`index.get`比列表上的`index`快. (3认同)