#python
#python
Вопрос:
# Method one
array_a = []
a = {}
for i in range(5):
a = {}
a[str(i)] = i
array_a.append(a)
print(array_a)
# [{'0': 0}, {'1': 1}, {'2': 2}, {'3': 3}, {'4': 4}]
# Method two
from copy import deepcopy
array_b = []
b = {}
for i in range(5):
b.clear()
b[str(i)] = i
array_b.append(deepcopy(b))
print(array_b)
# [{'0': 0}, {'1': 1}, {'2': 2}, {'3': 3}, {'4': 4}]
Я хотел бы знать, какой из вышеперечисленных является более эффективным.
И, если у вас есть лучший вариант, пожалуйста, дайте мне знать.
Комментарии:
1. Вы проверяли это? у ipython есть действительно отличная
timeit
команда, которая делает это довольно простым.
Ответ №1:
Разница не имеет значения. Оба должны каждый раз создавать новый dict. Поскольку первый понятнее, он предпочтительнее второго метода.
Моим предложением было бы понимание списка:
array_c = [{str(i): i} for i in range(5)]
Комментарии:
1. Согласен. Состав списка эквивалентен и намного более лаконичен. Также это выглядит круто 🙂
2. Я не могу использовать это понимание списка, поскольку моя логика очень сложная, и ее будет сложно подготовить, если поместить все в компактный формат. OP просто дает демонстрацию, которую я хочу знать о хорошей практике.
Ответ №2:
Вот однострочный вариант, который также должен быть более эффективным:
array_a.extend([{str(i): i} for i in xrange(5)])
Или через map():
array_a.extend(map(lambda i: {str(i): i}, xrange(5)))