Взгляните на следующий эксперимент:
>>> reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49],([],[]))
([], [49])
>>> reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49,58],([],[]))
([], [49, 58])
>>> reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49,58,76],([],[]))
([76], [49, 58])
>>> reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49,58,76,82],([],[]))
([76, 82], [49, 58])
>>> reduce(lambda(a,b),c: (a+[c],b) if c > 60 else (a,b + [c]), [49,58,76,82,88,90],([],[]))
([76, 82, 88, 90], [49, 58])
Функция reduce
описывается следующим образом:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
В нашем примере функция является лямбда с первым аргументом в качестве 2-го элемента tuple (a,b)
и второй аргумент как целое число c
взято из списка для обработки. Поскольку функция создает 2-элементный набор списков, он инициализируется как ([], [])
. Когда начинается обработка, если элемент равен> 60, он добавляется в первый список кортежа; иначе он добавляется ко второму списку кортежей.
Синтаксис a+[c]
- действительно синтаксис списка extend
. Мы не можем сделать a+c
, так как a
- это список, а c
- целое число. Аналогично, для b+[c]
Python3: уменьшить (lambda a, c: (a [0] + [c], a [1]), если c> 60 else (a [0], a [1] + [c ]), [49, 58, 76, 82, 88, 90], ([], [])) ' –
@arvindpdmn Большое спасибо! –