我需要在biglist中搜索和排序大量数据,并将它们放在python 3.5中的其他列表中。 当我完成编码时,我意识到如果我只需要检查biglist中的项目,我应该使用switch语句来提高代码的效率。我初学者讲的是python。我在python 3.5中搜索了switch语句,并且很震惊,这样的声明并没有。存在于python中。(我在C,Java和JavaScript中编写了一些程序,它们都有switch语句,所以我认为在每种语言中都必须存在流控制。)
我搜索biglist的代码部分看起来像这样:
for item in biglist:
if item == String1:
list1.append(biglist[biglist.index(item) + 1])
continue
#
#this goes on till String10 and ends like this
#
elif item == String10:
list10.append(biglist[biglist.index(item) + 1])
continue
else:
break
整个程序花了大约12个小时来完成一个数据集。我需要这样做4次,但在我这样做之前,如果我还没有实现最有效的解决方案,我会喜欢一些建议,甚至是如何使我的代码更高效,更快速的解决方案。
请解释为什么解决方案更有效率,因为我想了解它。
答案 0 :(得分:2)
效率低与"切换"的存在或其他无关,但事实上您使用.index()
方法,该方法会在列表中进行全面扫描以找到您的项目。没有必要这样做,您可以使用enumerate
函数返回索引:
for index, item in enumerate(biglist):
if item == String1:
list1.append(biglist[index + 1])
答案 1 :(得分:1)
性能问题很可能不是类似switch的if语句,而是在O(n)(Complexity of list.index(x) in Python)中运行的biglist.index(item)
操作。
使用类似:
for idx, item in enumerate(biglist):
print idx, item
跟踪项目的索引。
如果你仍然想要替换if语句,你可以使用一个字典,其中列出了为每个可能的项目值存储的列表。
答案 2 :(得分:1)
这可以模仿switch
。
def switch(x):
return {
'String1': list1,
'String10' : list10
}.get(x)
for item in bigList:
try:
switch(item).append(biglist[biglist.index(item) + 1])
except AttributeError:
#Do some other work