01/10/2018, 09:17

Làm sao để chuyển đoạn code dùng for loop này sang reduce trong Python?

Mấy bạn cho mình hỏi mình có đoạn code sau để tính biểu thức

s = [s[0], s[1], s[2], ... s[n-1]]

res = (((...(s[0] + s[1]) * s[2] + s[3]) * s[4] + ...)

Python:

    s = [1, 2, 3, 4, 5, 6, 7]

    def add(x, y):
        return x + y

    def mul(x, y):
        return x * y

    res = s[0]
    for i in xrange(1, len(s)):
        if i % 2 == 0:
            res = mul(res, s[i])
        else:
            res = add(res, s[i])

    # res_reduce = reduce(...) # ?

    print res

bây giờ mình muốn chuyển sang dùng lambda bằng hàm reduce:
res = reduce(lambda x, y: x + y if ... x * y,s) thì phải làm sao để đổi điều kiện đây mấy bạn @.@ ?

Thành Phạm viết 11:25 ngày 01/10/2018

Mình chỉ viết được thế này thôi

s = [1, 2, 3, 4, 5, 6, 7]
a = list(enumerate(s))
a[0] = s[0]
print reduce(lambda x, y: x*y[1] if y[0] % 2 == 0 else x+y[1] ,a)

Mà sao phải khổ thế bạn, cứ viết bình thường cho dễ debug

À đoạn loop nên viết kiểu này đẹp hơn này, pythonic hơn

for index, element in enumerate(s):
    if index % 2 == 0:
        res = mul(res, element)
    else:
        res = add(res, element)
Nguyễn Duy Hùng viết 11:33 ngày 01/10/2018

Tại mới học nên phải làm nhiều cách cho quen cảm ơn nhiều nhé.

Bài liên quan
0