Python: how to sort a list of strings by substring relevance?

后端 未结 3 452
[愿得一人]
[愿得一人] 2021-01-16 06:38

I have some list of strings, for example:

["foo bar SOME baz TEXT bob",
"SOME foo bar baz bob TEXT",
"SOME foo TEXT",
"         


        
3条回答
  •  一整个雨季
    2021-01-16 07:05

    Here is my take on it.

    l = ["foo bar SOME baz TEXT bob",
    "SOME foo bar baz bob TEXT",
    "SOME foo TEXT",
    "foo bar SOME TEXT baz",     
    "SOME TEXT"]
    
    l.sort(key=lambda x: (x.find("SOME")-x.find("TEXT"))*0.9-0.1*x.find("SOME"), reverse=True)
    
    print(l)
    

    OUTPUT:

    ['SOME TEXT', 'foo bar SOME TEXT baz', 'SOME foo TEXT', 'foo bar SOME baz TEXT bob', 'SOME foo bar baz bob TEXT']
    

    So what we have done is sorted the list based on major weight to the distance between "SOME" and "TEXT" and some minor weight to the occurrence of "SOME" in the string.

    Another longer way would be to first group the list based on the their distance between SOME and TEXT. And then sort the each group based on the position of "SOME".

提交回复
热议问题