Автор оригинала: Alex Lambert.
Почему Python для петлей нужно упростить?
Существует классическая проблема, каждая программист, когда они начинают использовать Python или другие языки с аналогичной особенностью: для петлей могут повторяться непосредственно за большинство повторных документов или проиндексироваться.
Это не звучит как проблема, так как больше вариантов не должно приводить к худшим результатам. Проблема в том, что результаты могут быть хуже, это то, что есть простой способ получить оба лучших мира, что многие программисты просто не используют: перечислять ().
Как это работает
Первое, что я хочу подчеркнуть о работе с Python, состоит в том, что вы можете определить несколько переменных в одной строке с использованием запятых. Это важно перечислять (), так как мы хотим лучшее из обоих миров.
def ret2(): return 2,22 a,b = ret2() print(a,b)
(2,22)
Далее давайте посмотрим на то, что на самом деле делает перечисление (). Итак, во-первых, я сделаю список, L и вызовите перечисление () на нем.
l = ['a','b','c','d'] e = enumerate(l)
Если мы напечатали е сейчас, это будет выглядеть что-то вроде:
Но, если мы повторяемся через объект, мы получаем:
for i in e: print(i)
(0, 'a') (1, 'b') (2, 'c') (3, 'd')
Таким образом, перечисление () возвращает кортежи с помощью позиционных данных сначала и элемент позиции вторым. Представьте, что мы хотим объединить два матрица 3×3 элементами элементами. За исключением в определенных случаях, мы сделаем что-то другое, чтобы показать перечисление ().
Пример
l = [[4,3,1],[6,7,3],[9,3,5]] l2 = [[0,2,2],[0,9,4],[5,5,1]] l_out = [] for i in range(len(l)): l_temp = [] for j in range(len(i)): if l[i][j] == 6 and l2[i][j] == 0: l_temp += [l[i][j]] elif l[i][j] == 3: l_temp += [l2[i][j]] else: l_temp += combine(l[i][j], l2[i][j]) l_out += [l_temp]
l = [[4,3,1],[6,7,3],[9,3,5]] l2 = [[0,2,2],[0,9,4],[5,5,1]] l_out = [] for i,row in enumerate(l): l_temp = [] for j,val in enumerate(i): if val == 6 and l2[i][j] == 0: l_temp += [val] elif val == 3: l_temp += [l2[i][j]] else: l_temp += combine(val, l2[i][j]) l_out += [l_temp]
Заключение
Используя перечисление (), вы можете вырезать множество вызовов индексации в список. Есть гораздо лучшее использование перечисления (), но вам придется найти их через практику. Полезность () Полезность () может варьироваться в зависимости от создания петли более читаемой, чтобы упростить проблему до меньшего количества строк кода.