当func()没有返回值时,如何使用map(func,iterator)函数?

时间:2017-07-03 03:28:48

标签: python-3.x functional-programming

print()之类的函数不返回值。但有时我确实需要对它们进行迭代。是否有任何方法以函数式编程方式进行编码,而不是使用" for"?

# changes some values of a list according to another pointer iterator.
thelist = [1]*100
slices = [(3,8),(9,15),(72,88)]
for items in slices:
    for i in range(items[0],items[1]):
        thelist[i] = 8

以下是示例,我想要的是更改" thelist"中的值。如何使用理解或map()或其他方法重新编码,而不会失去代码的效率。

2 个答案:

答案 0 :(得分:0)

您的代码大致相当于:

import itertools
slices = set(itertools.chain(*itertools.starmap(range, ((3,8),(9,15),(72,88)))))
thelist = map(lambda (x, y): y if x in slices else 8, enumerate(range(100)))

所以有一种功能性的方法,但我不建议在这种情况下,你不应该使用功能进行副作用计算

答案 1 :(得分:0)

另外,没有itertools:

thelist2 = map(lambda ix: 8 if any( (s[0] <= ix[0] < s[1] for s in slices) ) else ix[1], enumerate(thelist2))

但它的可读性差得多(恕我直言)。另外,请参阅Daniel Sanchez关于副作用的评论。副作用不是函数编程方式......