Добавить к пустому списку против инициализации сначала, а затем присвоить значения индексам списка - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь сделать код в python. Я заранее знаю размер списка.

Предположим, что список равен l, а его размер равен n.

Поэтому я должен сначала инициализировать список длины n, а затем использовать a для l oop, положить l [i] = i для i от 0 до n.

ИЛИ

Лучше ли сначала инициализировать пустой список, а затем использовать для l oop добавление элементов в список?

Я знаю, что оба эти подхода дадут один и тот же результат. Я просто хочу спросить, быстрее ли один или эффективнее другого.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Если вы сейчас размер вашего списка, ваш первый подход правильный. Вы можете использовать библиотеку numpy для создания списка любого размера.

import numpy as np
X = np.zeros(n, y) #size of your list
#use your for loop here
for i in range(10):
    a[i] = i+1
X.tolist()
0 голосов
/ 23 апреля 2020

Добавление происходит быстрее, потому что списки предназначены для изменчивости. Вы можете инициализировать список фиксированного размера с помощью кода, подобного

x = [None]*n

Но это само по себе требует времени. Я написал быструю программу для сравнения скоростей следующим образом.

import time
def main1():
    x = [None]*10000
    for i in range(10000):
        x[i] = i
    print(x)

def main2():
    y = []
    for i in range(10000):
        y.append(i)
    print(y)


start_time = time.time()
main1()
print("1 --- %s seconds ---" % (time.time() - start_time))
#1 --- 0.03682112693786621 seconds ---
start_time = time.time()
main2()
print("2 --- %s seconds ---" % (time.time() - start_time))
#2 --- 0.01464700698852539 seconds ---

Как видите, первый способ на моем компьютере значительно медленнее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...