在我的例子中,替换switch语句最有效的方法是什么?

2024-09-26 17:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3.5中,我需要在biglist中搜索和排序大量数据,并将它们排序到其他列表中。 当我完成编码时,我意识到如果我只需要检查biglist中的项,我应该使用switch语句来提高代码的效率。谈到python我还处于初级水平。我在Python3.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次,但是在我这么做之前,如果我还没有实现最有效的解决方案的话,我希望能给我一些建议,甚至是解决方案,来让我的代码更高效、更快。在

请解释一下为什么这个解决方案更有效,因为我想了解它。在


Tags: 数据代码程序列表index排序语句解决方案
3条回答

效率低下与“switch”的存在或其他情况无关,而是使用.index()方法,这会导致对列表进行全面扫描以找到您的项目。不需要这样做,您可以使用enumerate函数返回索引:

for index, item in enumerate(biglist):
    if item == String1:
        list1.append(biglist[index + 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

最有可能的性能问题不是switch-like if语句,而是在O(n)(Complexity of list.index(x) in Python)中运行的biglist.index(item)操作。在

使用类似于:

for idx, item in enumerate(biglist):
    print idx, item 

跟踪项目的索引。在

如果你还想替换If语句,你可以使用一个字典,它为每个可能的项值存储一个列表。在

相关问题 更多 >

    热门问题