Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中循环的优化和加速_Python_Python 3.x - Fatal编程技术网

Python中循环的优化和加速

Python中循环的优化和加速,python,python-3.x,Python,Python 3.x,如何优化这三段代码? 尤其是第三种情况,因为列表值之间有许多组合,并且使用1000个输入时,时间危险地更长 代码1: e00=[] for i in range(len(c1)): for j in range(len(d1[i])): if d1[i][j]%2==0: d = [c1[i],d1[i][j]] e00.append(d) 代码2: sciezki=[] for i in range(len(out2)):

如何优化这三段代码? 尤其是第三种情况,因为列表值之间有许多组合,并且使用1000个输入时,时间危险地更长

代码1:

e00=[]
for i in range(len(c1)):
    for j in range(len(d1[i])):
        if d1[i][j]%2==0:
           d = [c1[i],d1[i][j]]
           e00.append(d)
代码2:

sciezki=[]
for i in range(len(out2)):     
    x1 = out2[i][-len(out2[i])]
    x2 =out2[i][-1]    
    z1 = nx.shortest_path(g, x1, x2)  
    if z1 == out2[i] and len(z1)==8:
          sciezki.append(z1)
代码3:

out=[] 
for h in range(len(k)):
    if len(out)!=0:
       k2 = [out, k[h]]
       for q in range(len(k2[0])):
           for w in range(len(k2[1])):
               r = list(chain(k2[0][q],k2[1][w]))
               p = [n for n, _ in groupby(r)]
               if len(p)==h+2:
                  out.append(p)  
    else:
       for i in range(len(k[0])):
           for j in range(len(k[1])):
               r = list(chain(k[0][i],k[1][j]))
               p = [n for n, _ in groupby(r)]
               if len(p)==3:
                   out.append(p)

代码1

将条件列表理解与枚举一起使用:

e00 = [[c_val, d_val] 
       for i, c_val in enumerate(c1) 
       for d_val d1[i] 
       if not d_val % 2]
代码2

只需稍作修改

g = ...  # Undefined in sample code.
sciezki = []
for out2_val in out2:     
    x1 = out2_val[-len(out2_val)]
    x2 = out2_val[-1]    
    z1 = nx.shortest_path(g, x1, x2)  
    if z1 == out2_val and len(z1) == 8:
        sciezki.append(z1)
        x = '\n'.join(map(str,sciezki))  # Remove if possible. 

通常情况下,最好直接迭代列表,因此对于c中的ci
,而不是范围内的i(len(c)):
从分析算法开始,看看是否可以使其更快。在这之后,你再看代码细节。@klutt这永远是最糟糕的,这个人在算法上坐了几天,然后你必须考虑可能的算法更改:)我的意思是:算法的目标是什么?好吧,如果不涉及底层算法,我怀疑你会在性能上获得很多。但是有一些显而易见的事情,比如尝试直接迭代列表而不是使用索引,哦,不要做
r=list(chain(…)
只要使用
r=chain(…)
。当然,另一个微观优化是“内联”
.append
方法调用:
out=[];append\u out=out.append
然后使用
append\u out(p)
代替
out.append(p)
。但所有这些都是很小的问题,你的问题是算法的复杂性g'到
g=nx.Graph()
z Networkx。2科德·波尔加纳·波尔瓦尼乌·皮尔斯泽戈和奥斯塔尼耶戈·沃兹·亚·普雷泽西亚·普雷泽兹“最短路径”,czy dany wybór jest Jednozny。