Рубрики
Без рубрики

Как повторять два списка параллельно?

Сводка: Используйте встроенный метод Python ZIP (), чтобы перейти через два списка параллельно. Метод ZIP () Возвращает итератор кортежей, а NTH элемент каждого итератора может быть соединен вместе с использованием функции ZIP (). Другие методы итерации по спискам параллельно включают метод перечисления () и традиционный подход итерации … Как перейти через два списка параллельно? Прочитайте больше “

Автор оригинала: Shubham Sayon.

Резюме: Используйте встроенный метод Python zip () Перейти через два списка параллельно. zip () Метод возвращает итератор кортежей и N TH Пункт каждого итератора может быть соединен вместе с помощью zip () функция. Другие методы итерации через списки параллельно включают перечислять () Метод и традиционный подход итерации с использованием для петля.

Проблема: Учитывая два списка; Как повторять каждый предмет обоих Списки одновременно?

Пример: Подумайте, что у вас есть два списка, как указано в примере ниже.

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']

print("Founder        Organization")
for f, o in some_iterator(founder,org):
  print (f,"   ", o)

Ожидаемый вывод :

Founder        Organization
Steve Jobs     Apple
Bill Gates     Microsoft
Jeff Bezos     Amazon

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

Метод 1: Использование ZIP ()

Как название предполагает zip () Функция – это встроенная функция в Python, которая возвращает zip-объект, который представляет итератор кортежей. Это позволяет нам соединять вместе с первым элементом в каждом итераторе, а затем соединить второй элемент в каждом итераторе и так далее.

zip () В Python 3 против Python 2.

  • ZIP () в Python 3 возвращает Итератор кортежи , тогда как zip () В Python 2 возвращает Список кортежи Отказ
  • Чтобы получить список кортежей, использующих zip () В Python 3 используйте Список (zip (f, o))
  • Чтобы получить итератор кортежей, используя ZIP () в Python 2, используйте Itertools.izip.

Примечание: zip () останавливает итерацию после того, как более короткий список среди данного по темпам исчерпан. Давайте посмотрим, что это значит в приведенном ниже примере.

li_1 = ['a', 'b', 'c']
li_2 = [1,2]
for f, o in zip(li_1, li_2):
  print(f, o)

Выход:

a 1
b 2

➥ В приведенном выше примере zip () Перестал итерацию после того, как более короткий список, который является li_2 был исчерпан, следовательно, элемент C не был включен в вывод. Поэтому, чтобы повторить до самого длинного итератора:

  • iTertools.zip_longest () Если вы используете Python 3.
  • Itertools.izip_longest Если вы используете Python 2.
  • В каждом случае мы должны импортировать Itertools модуль.

Пример:

import itertools
li_1 = ['a','b','c']
li_2 = [1,2]
for f, o in itertools.zip_longest(li_1, li_2):
  print(f, o)

Выход:

a 1
b 2
c None

Теперь, когда мы знаем, как использовать zip () Метод в Python, давайте посмотрим на то, как мы можем использовать его, чтобы решить нашу проблему в программе, приведенной ниже.

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']

print("Founder        Organization")
for f, o in zip(founder, org):
  print (f,"   ", o)

Выход:

Founder        Organization
Steve Jobs     Apple
Bill Gates     Microsoft
Jeff Bezos     Amazon

Способ 2: Использование для цикла

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

Пример:

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']

print("Founder        Organization")
for i in range(len(founder)):
  print(founder[i],"   ",org[i])

Выход:

Founder        Organization
Steve Jobs     Apple
Bill Gates     Microsoft
Jeff Bezos     Amazon

Ниже приведено однострочное решение для вышеуказанного метода:

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']

print([( founder[i], org[i]) for i in range(len(founder))])

Выход:

[('Steve Jobs', 'Apple'), ('Bill Gates', 'Microsoft'), ('Jeff Bezos', 'Amazon')]

Метод 3: эмуляция ZIP () с использованием пользовательской функции

Лучшая практика, чтобы повторить через два списка параллельно – использовать zip () Функция, которая была упомянута ранее. Вы также можете эмулировать функционирование метода ZIP () путем создания собственной пользовательской функции с доходность Ключевое слово для возврата элементов обеих списков в парах.

доходность это ключевое слово, похожее на Возвращение ключевое слово, но в случае доходность Функция возвращает генератор. Подробнее о доходность Ключевое слово в Python, пожалуйста, следуйте нашему Учебник в блоге здесь.

Теперь давайте посмотрим, как мы можем определить нашу пользовательскую функцию, чтобы повторить несколько элементов списка одновременно.

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']
count = len(founder)

def custom_zip():
    global count
    it1 = iter(founder)
    it2 = iter(org)
    try:
      while count>0:
          yield next(it1), next(it2)
          count = count -1
    except:
      raise StopIteration

for item in custom_zip():
       print(list(item))

Выход:

['Steve Jobs', 'Apple']
['Bill Gates', 'Microsoft']
['Jeff Bezos', 'Amazon']

Метод 4: Использование перечисления ()

перечислять () Способ в Python, добавляет счетчик до счетчика, как кортеж или список и возвращает его в качестве перечисленного объекта. Мы можем использовать для итерации через списки параллельно, как показано в программе ниже.

founder = ['Steve Jobs', 'Bill Gates', 'Jeff Bezos']
org = ['Apple', 'Microsoft', 'Amazon']
count = len(founder)
print("Founder        Organization")
for n, f in enumerate( founder ):
  print(f,"   ",org[n] )

Выход:

Founder        Organization
Steve Jobs     Apple
Bill Gates     Microsoft
Jeff Bezos     Amazon

Если вы все еще используете Python 2.x, вы также можете использовать функцию карты () с первым аргументом AS Нет а затем итерации через оба списка параллельно. Я не включал этот метод в наш список решений, потому что, если вы используете Python 3.x, то это решение не будет работать так, как вы получите Типеррера. Тем не менее, только ради понимания давайте посмотрим на использование метода карты для более старой версии Python.

Пример:

a = ['A', 'B', 'C']
b = ['I', 'II', 'III']
for x, y in map(None, a, b):
    print(x, y)

Выход в Python 2.x:

('A', 'I')
('B', 'II')
('C', 'III')

Выход в Python 3.x:

Traceback (most recent call last):
  File "main.py", line 4, in 
    for x, y in map(None,a, b):
TypeError: 'NoneType' object is not callable

Вывод

Ключ взлетает из этой статьи:

  • Как повторить через два списка в Python, используя следующие методы:
    • zip () Метод:

      • Какая разница при использовании ZIP () в Python 3 и Python 2?
      • Важность iTertools.zip_longest () Отказ
    • для петли.
    • перечислять () метод.
    • Эмулируя функцию ZIP () с использованием пользовательской функции.
    • Использование способа карты () в Python 2.x.

Пожалуйста, подпишитесь и оставайтесь настроенными для более интересных статей!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @: