def make_sort_key(word):
indices = {}
for i, c in enumerate(word):
indices.setdefault(c, []).append(i)
def key(c):
return indices[c].pop()
return key
sorted(scrambled, key=make_sort_key(word))
它为word中的每个字母预先构建索引,并在scrambled列表排序时返回这些索引。你知道吗
演示:
>>> word = 'letters'
>>> scrambled = ['s', 'e', 'l', 'r', 'e', 't', 't']
>>> def make_sort_key(word):
... indices = {}
... for i, c in enumerate(word):
... indices.setdefault(c, []).append(i)
... def key(c):
... return indices[c].pop()
... return key
...
>>> sorted(scrambled, key=make_sort_key(word))
['l', 'e', 't', 't', 'e', 'r', 's']
list(word)
会做得最快。。你知道吗但是要对
scrambled
进行排序,可以使用:或者,使用就地排序:
只有当
word
没有重复的字母时,这才起作用。对于scrambled
中的每个条目,调用word.index()
,返回word
中每个字母的索引,然后使用索引对scrambled
列表进行排序。你知道吗演示:
对于重复的字母,可以基于
word
索引构建键函数:它为
word
中的每个字母预先构建索引,并在scrambled
列表排序时返回这些索引。你知道吗演示:
我从字面上解释:
下面是一个处理重复字母的解决方案:
例如:
相关问题 更多 >
编程相关推荐