4

正常方式:

for x in myList:
    myFunc(x)

您必须使用变量 x

利用

map(myFunc,myList)

事实上你必须用它来完成上述工作

list(map(myFunc,myList))

那将建立一个列表,我不需要建立一个列表

也许有人会建议我这样做

def func(l):
   for x in l:
        ....

那是另一个话题

有这样的吗?

every(func,myList)
4

3 回答 3

6

“正常方式”绝对是最好的方式,尽管出于您可能需要的任何原因itertools都提供了消费配方:

import collections
from itertools import islice

def consume(iterator, n):
    "Advance the iterator n-steps ahead. If n is none, consume entirely."
    # Use functions that consume iterators at C speed.
    if n is None:
        # feed the entire iterator into a zero-length deque
        collections.deque(iterator, maxlen=0)
    else:
        # advance to the empty slice starting at position n
        next(islice(iterator, n, n), None)

这可以像这样使用:

consume(imap(func, my_list), None) # On python 3 use map

此函数执行速度最快,因为它通过使用在 C 端运行的函数避免了 python for 循环开销。

于 2012-09-24T03:56:53.783 回答
3

AFAIK 标准库中没有“foreach”快捷方式,但这样的事情很容易实现:

def every(fun, iterable):
    for i in iterable:
        fun(i)
于 2012-09-24T04:07:28.350 回答
0

如果您只想myList修改为包含myFunc(x)所有 x inmyList那么您可以尝试一个列表推导,它也需要一个变量,但不会让变量泄漏到推导范围之外:

myList = [myFunc(x) for x in myList]

希望有帮助

于 2012-09-24T04:04:50.990 回答