一般来说,我对编程还不熟悉,所以希望在这里真正扩展我的技能。我正在尝试编写一个脚本,从一个对象中获取字符串列表,然后根据我的设计模板对它们进行排序。任何不在模板中的项都将添加到末尾。你知道吗
我现在是这样做的,但是有人能提出一个更好/更有效的方法吗?你知道吗
originalList = ['b', 'a', 'c', 'z', 'd']
listTemplate = ['a', 'b', 'c', 'd']
listFinal = []
for thing in listTemplate:
if thing in originalList:
listFinal.append(thing)
originalList.pop(originalList.index(thing))
for thing in originalList:
listFinal.append(thing)
originalList.pop(originalList.index(thing))
最后一步,您可以使用:
它会把这些项目添加到最后。你知道吗
您可以使用
listTemplate
列表创建dict,这样就可以将昂贵的(O(N)
)list.index
操作简化为O(1)
查找。你知道吗使用
enumerate
创建一个dict,其中项目作为键(考虑到项目是可散列的),索引作为值。你知道吗现在
dic
看起来像:现在对于
lis1
中的每个项,我们需要检查它在dic中的索引,如果找不到键,我们将返回float('inf')
。你知道吗用作
key
的函数:现在对列表排序:
试试这个:
工作原理如下:
listTemplate
中的每个元素建立一个字典,指出它相对于其他元素的相对顺序。例如a
是0
,b
是1
等等originalList
进行排序。如果它的一个元素出现在order
字典中,那么使用它的相对位置进行排序。如果不存在,则返回一个正的无穷大值-这将保证不在listTemplate
中的元素将结束于末尾,并且它们之间没有进一步的排序。你知道吗这个问题的解决办法虽然正确,但不是很好。特别是,每当您必须构建一个新列表时,请尝试使用列表理解,而不是显式循环/附加。“销毁”输入列表(在本例中使用
pop()
)不是一个好的做法。你知道吗相关问题 更多 >
编程相关推荐