Рубрики

Эффективное использование итераций в Python

Условие: итераторы в Python

Ниже приведены различные способы использования итераторов.

Подход в стиле C: этот подход требует предварительного знания общего количества итераций.

# Доступ к элементам списка в стиле C

cars = ["Aston", "Audi", "McLaren"]

i = 0

while (i < len(cars)):

    print cars[i]

    i += 1

Выход:

Aston
Audi 
McLaren 

Важные моменты:

  • Этот стиль зацикливания редко используется программистами на python.
  • Этот четырехшаговый подход не создает компактности с циклической конструкцией с одним представлением.
  • Это также подвержено ошибкам в крупномасштабных программах или проектах.
  • В Python нет C-стиля для цикла, т. Е. Цикла, подобного for (int i = 0; i <n; i ++)

Использование стиля for-in (или для каждого ):
Этот стиль используется в питоне, содержащем итератор списков, диктон, n-мерные массивы и т. Д. Итератор извлекает каждый компонент и печатает данные во время цикла. Итератор автоматически увеличивается / уменьшается в этой конструкции.

# Доступ к элементам с помощью цикла for-in

  

cars = ["Aston", "Audi", "McLaren"]

for x in cars:

    print x

Выход:

Aston
Audi 
McLaren 

Смотрите это для большего количества примеров различных типов данных.

Индексирование с использованием функции Range: Мы также можем использовать индексирование с использованием range () в Python.

# Доступ к элементам с использованием индексов и for-in

  

cars = ["Aston", "Audi", "McLaren"]

for i in range(len(cars)):

    print cars[i]

Выход:

 Aston
Audi 
McLaren 

Перечислим:
Enumerate — это встроенная функция Python, которая принимает входные данные в качестве итератора, списка и т. Д. И возвращает кортеж, содержащий индекс и данные этого индекса в последовательности итератора. Например, enumerate (cars), возвращает итератор, который будет возвращать (0, cars [0]), (1, cars [1]), (2, cars [2]) и так далее.

# Доступ к элементам с помощью enumerate ()

  

cars = ["Aston" , "Audi", "McLaren "]

for i, x in enumerate(cars):

    print (x)

Выход :

Aston
Audi
McLaren 

Ниже решение также работает.

# Доступ к элементам и индексам enumerate ()

  

cars = ["Aston" , "Audi", "McLaren "]

for x in enumerate(cars):

    print (x[0], x[1])

Выход :

(0, 'Aston')
(1, 'Audi')
(2, 'McLaren ')

Мы также можем напрямую напечатать возвращаемое значение enumerate (), чтобы увидеть, что он возвращает.

# Печать возвращаемого значения enumerate ()

  

cars = ["Aston" , "Audi", "McLaren "]

print enumerate(cars)

Выход :

[(0, 'Aston'), (1, 'Audi'), (2, 'McLaren ')]

Enumerate принимает параметр start, который по умолчанию установлен в ноль. Мы можем изменить этот параметр на любое значение, которое нам нравится. В приведенном ниже коде мы использовали начало как 1.

# демонстрация использования начала в перечислении

  

cars = ["Aston" , "Audi", "McLaren "]

for x in enumerate(cars, start=1):

    print (x[0], x[1])

Выход :

(1, 'Aston')
(2, 'Audi')
(3, 'McLaren ')

enumerate () помогает встроить решение для доступа к каждому элементу данных в итераторе и извлечения индекса каждого элемента данных.

Циклические расширения:
i) Два итератора для одной циклической конструкции: в этом случае список и словарь должны использоваться для каждой итерации в одном циклическом блоке с использованием функции перечисления. Давайте посмотрим пример.

# Два отдельных списка

cars = ["Aston", "Audi", "McLaren"]

accessories = ["GPS kit", "Car repair-tool kit"]

  
# Единственный словарь содержит цены на автомобили и
# его аксессуары.
# Первые три товара хранят цены на автомобили и
# Следующие две вещи хранят цены на аксессуары.

prices = {1:"570000$", 2:"68000$", 3:"450000$",

          4:"8900$", 5:"4500$"}

  
# Печать цен на автомобили

for index, c in enumerate(cars, start=1):

    print "Car: %s Price: %s"%(c, prices[index])

  
# Печать цен на аксессуары

for index, a in enumerate(accessories,start=1):

    print ("Accessory: %s Price: %s"\

           %(a,prices[index+len(cars)]))

Выход:

Car: Aston Price: 570000$
Car: Audi Price: 68000$
Car: McLaren Price: 450000$
Accessory: GPS kit Price: 8900$
Accessory: Car repair-tool kit Price: 4500$

ii) функция zip (оба итератора должны использоваться в единой циклической конструкции):
Эта функция полезна для объединения одинаковых итераторов типов (list-list или dict dict и т. Д.) В элементах данных в i-й позиции. Он использует самую короткую длину этих входных итераторов. Другие элементы итераторов большей длины пропускаются. В случае пустых итераторов он возвращает No output.

Например, использование zip для двух списков (итераторов) помогло объединить одну машину и ее необходимый аксессуар.

# Python программа для демонстрации работы zip

  
# Два отдельных списка

cars = ["Aston", "Audi", "McLaren"]

accessories = ["GPS", "Car Repair Kit"

               "Dolby sound kit"]

  
# Объединение списков и печать

for c, a in zip(cars, accessories):

    print "Car: %s, Accessory required: %s"\

          %(c, a)

Выход:

Car: Aston, Accessory required: GPS
Car: Audi, Accessory required: Car Repair Kit
Car: McLaren, Accessory required: Dolby sound kit

Обратная сторона этих итераторов из функции zip известна как разархивирование с использованием оператора «*».

Использование функции перечисления и функции zip помогает добиться эффективного расширения итерационной логики в python и решает еще много подзадач огромной задачи или проблемы.

# Программа Python для демонстрации распаковать (обратный
# zip) используя * с функцией zip

  
# Распаковать списки

l1,l2 = zip(*[('Aston', 'GPS'), 

              ('Audi', 'Car Repair'), 

              ('McLaren', 'Dolby sound kit'

           ])

  
# Печать распакованных списков

print(l1)

print(l2)

Выход:

('Aston', 'Audi', 'McLaren')
('GPS', 'Car Repair', 'Dolby sound kit')

Ссылки:
1. https://docs.python.org/2/library/functions.html#enumerate
2. https://docs.python.org/2/library/functions.html#zip

Эта статья предоставлена Кришнасагаром Подэдраджем . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Эффективное использование итераций в Python

0.00 (0%) 0 votes