簡體   English   中英

func()不返回值時如何使用map(func,iterator)函數?

[英]How to use map(func,iterator) function when func() do not return a value?

像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”中的值。 如何通過使用comprehension或map()或其他方法重新編碼,而又不損失代碼的效率。

您的代碼大致相當於:

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)))

因此,有一種實用的方法可以執行此操作,但在這種情況下,我不建議您使用功能進行副作用計算

另外,沒有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關於副作用的評論。 副作用不在函數式編程方式下...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM