2016-10-16 3 views
-1

Я хочу оптимизировать 2 для циклов в одиночный цикл, существует ли какой-либо способ, поскольку длина массива очень велика.Вложенная оптимизация цикла в python

A = [1,4,2 6,9,10,80] #length of list is very large 
B = [] 
for x in A: 
    for y in A: 
     if x != y: 
      B.append(abs(x-y)) 
print(B) 
+1

Что именно вы пытаетесь достичь? –

+0

Действительно ли вы хотите, чтобы ваш код запускался? Вывод этого фрагмента в порядке? –

+0

Что между второй и третьей запятой в 'A': цифры' 2' и '6' или число' 26'? Как и сейчас, ваш код остановится с синтаксической ошибкой. –

ответ

1

не лучше, но более вещий:

B = [abs(x-y) for x in A for y in A if x!=y] 

, если вы абсолютно не нужны дубликаты (abs(a-b) == abs(b-a)), вы можете половину ваш список (и, таким образом, вычисление):

B = [abs(A[i]-A[j]) for i in range(len(A)) for j in range(i+1, len(A))] 

, наконец вы может использовать мощность numpy, чтобы получить ускорение C++:

import numpy as np 

A = np.array(A) 
A.shape = -1,1 # make it a column vector 

diff = np.abs(A - A.T) # diff is the matrix of abs differences 

# grab upper triangle of order 1 (i.e. less the diagonal) 
B = diff[np.triu_indices(len(A), k=1)] 

Но это всегда будет O (n^2) независимо от того, что ...

Смежные вопросы