2015-08-05 3 views
0

У меня есть класс A, список экземпляра A (alist). Класс A имеет метод экземпляра (funca), который имеет только один параметр другого экземпляра A и возвращает экземпляр A. Теперь я хочу использовать «funca», чтобы получить результат всех элементов в «alist». Мой сценарий таков:Нужен лучший способ заставить функцию воздействовать на смежные элементы списка

b = a[0] 
for a in alist[1:]: 
    b=b.funca(a) 

Я чувствую код некрасиво. Есть лучший способ сделать это? (Итерация или что-то?)

ответ

2

Вы по существу цепочки на A.funca() вызовы на основании списка, производя вызов:

alist[0].funca(alist[1]).funca(alist[2]).funca(alist[3])...funca(alist[-1]) 

можно использовать reduce() function:

from functools import reduce # Python 3 compatibility 
result = reduce(lambda a, b: a.funca(b), alist) 

Это по существу делает то же, что и ваша петля, но в одной строке.

from functools import reduce импортирует function from the Python 3 location; в Python 2 это одна из встроенных функций. Начиная с версии Python 2.6 он также доступен в Python 3 для обеспечения передовой совместимости.

Смежные вопросы