Python:通过降低算法的复杂性来改进这一点

Jam*_*ner 1 python sorting algorithm

我有一个工作代码块,但似乎应该有一个更有效的算法,大概需要更少的循环或使用库/模块。

此示例版本的代码采用一个字符串列表,按 反向排序len(),然后构建一个新列表:

gs = ["catan", "ticket to ride", "azul"]

mg = {}
for i in range(len(gs)):
        mg[i] = len(gs[i])

popularity = {k: v for k, v in sorted(mg.items(), key=lambda v: v[1], reverse=True)}
tg = []
for game in popularity.keys():
        tg.append(gs[game])
Run Code Online (Sandbox Code Playgroud)

生产代码未设置mg[i]len(),并且列表中的元素不一定是字符串,但算法以其他方式工作。

为此,相同的输出是:

['ticket to ride', 'catan', 'azul']
Run Code Online (Sandbox Code Playgroud)

如何提高这个算法的效率?

AKX*_*AKX 5

gs = ["catan", "ticket to ride", "azul"]
tg = sorted(gs, key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)

对于字符串列表具有相同的效果。

如果您想对列表进行适当排序以提高空间效率,

gs.sort(key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)

这也适用于自定义“标准函数”:

def my_criteria_function(value):
    return len(value) * value.count(" ")  # super secret sauce

...sort(key=my_criteria_function) # (or sorted(..., key=my_criteria_function)
Run Code Online (Sandbox Code Playgroud)

  • 没关系; 然后将该函数替换为“len”。 (2认同)