我有一个工作块的代码,但似乎应该有一个更有效的算法,大概有更少的循环或使用库/模块。
这个示例版本的代码接受一个字符串列表,按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])
生成代码没有将mg[i]
设置为len()
,列表中的元素也不一定是字符串,但算法工作,否则
['ticket to ride', 'catan', 'azul']
如何提高这个算法的效率?
gs = ["catan", "ticket to ride", "azul"]
tg = sorted(gs, key=len, reverse=True)
对于字符串列表具有相同的效果。
如果您想对列表进行排序以提高空间效率,
gs.sort(key=len, reverse=True)
这也适用于自定义的"criteria函数":
def my_criteria_function(value):
return len(value) * value.count(" ") # super secret sauce
...sort(key=my_criteria_function) # (or sorted(..., key=my_criteria_function)