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()或其他方法重新编码,而不会失去代码的效率。
答案 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关于副作用的评论。副作用不是函数编程方式......