Генераторы Python, добавляющие два массива чисел: правильно ли я это выполняю? - PullRequest
1 голос
/ 09 февраля 2012

Я все еще немного смутен относительно концепции генераторов.Я хочу сделать функцию генератора, которая принимает два массива чисел и добавляет значения по соответствующим индексам.У меня есть кое-что, что работает, я просто не уверен, правильно ли я делаю это с ленивой оценкой (то есть с использованием генератора).Может кто-нибудь сказать мне, если это действительно правильный способ использования генератора, или исправить меня, если я делаю это неправильно?

def add(a1,a2):
    i = 0
    while i < len(a1):
        yield a1[i]+a2[i]
        i += 1

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Да, это очень хороший генератор. Вы уверены, что add это хорошее название для него?

zip поможет вам написать это более кратко

def add(a1, a2):
    for i,j in zip(a1, a2):
        yield i*j

Вы также можете встроить генератор в качестве выражения генератора

(i*j for i,j in zip(a1, a2))

Если вы используете Python2, вы должны использовать itertools.izip вместо zip, потому что zip не ленив в Python2

0 голосов
/ 09 февраля 2012

Вы можете сделать это без индекса следующим образом:

from itertools import izip

def mult(list1, list2):
    for item1, item2 in izip(list1, list2):
       yield item1 + item2

В Python 3 вам не нужен import и вы можете просто использовать zip(), так как zip() ленив в Python3.

Но да, то, как у вас это есть, это общая идея.

...