【发布时间】:2015-12-07 13:43:19
【问题描述】:
我需要在一个 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 次,但在我这样做之前,如果我还没有实现最有效的解决方案,我会喜欢一些关于如何使我的代码更高效、更快的建议甚至解决方案。
请也解释一下为什么该解决方案更有效,因为我想了解它。
【问题讨论】:
-
丹尼尔在这里有正确的答案,你的问题不在于 switch 语句或缺少它。请注意,Python
if ... elif ... elif ...的操作很像 switch 语句无论如何。永远只会选择一个分支。您完全不需要重复使用continue。您可以通过使用列表映射来避免切换,而不是使用单独的listxx列表。mapping = {'string1': [.....], 'string2': [....], ...},那就用mapping[item].append(biglist[index + 1])吧。 -
我读到 python 字典没有排序,然后它会弄乱 list1 到 list10 之间的从属关系,所以我仍然需要索引它们不是吗?例如,在 list1 中会显示姓名,在 list2 中会显示电子邮件等。
-
Python 字典没有顺序,没有。您需要订购吗?您可以使用
OrderedDict对象,或者如果它们是可排序的,则只需对键进行排序。 -
我实现了 Daniel Roseman 的映射和答案,我的程序现在需要的时间减少了 17%!这是一个很大的进步!
标签: python performance list switch-statement runtime