Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:map()在map迭代器中使用变量进行两次迭代_Python_Python 2.7_Map - Fatal编程技术网

python:map()在map迭代器中使用变量进行两次迭代

python:map()在map迭代器中使用变量进行两次迭代,python,python-2.7,map,Python,Python 2.7,Map,有没有办法把下面这条线作为地图 alist = [] for name in range(4): for sname in range(15): final = Do_Class(name, sname) #Is a class not to be bothered with alist.append(final) 改为alist.append(映射(..…可能中的多个映射?) 更新: x =

有没有办法把下面这条线作为地图

   alist = []
   for name in range(4):
            for sname in range(15):
                final = Do_Class(name, sname) #Is a class not to be bothered with
                alist.append(final)
改为alist.append(映射(..…可能中的多个映射?)

更新:

x = [Do_Class(name, sname) for name in xrange(15) for sname in xrange(4)]
alist = [i for i in x]
以上操作没有错误

alist = [i for i in Do_Class(name, sname) for name in xrange(15) for sname in xrange(4)]
返回UnboundLocalError:赋值前引用的局部变量“sname”


这一定是Python中最蹩脚的东西了

您不想/不需要
map
来实现这一点:

alist = [Do_Class(name, sname) for sname in range(15) for name in range(4)]

使用
map
仅当您可以执行类似
map(somefunc,somelist)
的操作时才合适。如果不是这样的话,您需要一个lambda,与列表理解相比,它只会增加不必要的开销。

您不想/不需要
映射

alist = [Do_Class(name, sname) for sname in range(15) for name in range(4)]
alist = map(lambda name : map(lambda sname : Do_Class(name, sname), range(15)), range(4)) #please don't do this

使用
map
仅当您可以执行类似
map(somefunc,somelist)
的操作时才合适。如果不是这样的话,您需要一个lambda,与列表理解相比,它只会增加不必要的开销。

我会使用
itertools.product

alist = map(lambda name : map(lambda sname : Do_Class(name, sname), range(15)), range(4)) #please don't do this
from itertools import product
alist = [Do_Class(x[0], x[1]) for x in product(range(4), range(15))]
如果您绝对需要地图:

alist = map(lambda x: Do_Class(x[0], x[1]), product(range(4), range(15)))
如果您想要较短的版本,但可读性较差:

alist = map(Do_Class, sorted(range(4)*15), range(15)*4)
编辑 需要对范围(4)*15进行排序以获得0,0,0,…,1。。。而不是0,1,2,3,0

编辑2 我偶然发现了
itertools.starmap
,它应该给出如下内容:

from itertools import starmap
from itertools import product
alist = starmap(Do_Class, product(range(4), range(15)))

我认为这也是一个很好的解决方案。

我会使用
itertools.product

from itertools import product
alist = [Do_Class(x[0], x[1]) for x in product(range(4), range(15))]
如果您绝对需要地图:

alist = map(lambda x: Do_Class(x[0], x[1]), product(range(4), range(15)))
如果您想要较短的版本,但可读性较差:

alist = map(Do_Class, sorted(range(4)*15), range(15)*4)
编辑 需要对范围(4)*15进行排序以获得0,0,0,…,1。。。而不是0,1,2,3,0

编辑2 我偶然发现了
itertools.starmap
,它应该给出如下内容:

from itertools import starmap
from itertools import product
alist = starmap(Do_Class, product(range(4), range(15)))

我认为这也是一个很好的解决方案。

当你可以简单地使用
列表理解时,为什么要使用
map

alist = [Do_Class(name, sname) for sname in range(15) for name in range(4)]
这应该比
map
更充分、更有效

如果您确实需要
映射
,可以执行以下操作:

alist = map(lambda x: Do_Class(x[0], x[1]), [(name, sname) for sname in range(15) for name in range(4)]) 

当您可以简单地使用
列表理解时,为什么要使用
map

alist = [Do_Class(name, sname) for sname in range(15) for name in range(4)]
这应该比
map
更充分、更有效

如果您确实需要
映射
,可以执行以下操作:

alist = map(lambda x: Do_Class(x[0], x[1]), [(name, sname) for sname in range(15) for name in range(4)]) 


这称为“列表理解”,这正是它的预期用途。返回NameError:未定义全局名称“name”,或未绑定LocalError:在赋值之前引用局部变量“name”,pythonic代码使用的理解多于
map
/
filter
@user2290820是否在末尾定义了两个循环<代码>名称
在理解中得到定义,其中表示
。。。对于范围(4)中的名称)]
@askewchan检查上面的更新。它适用于一种列表理解,但不适用于另一种方式这称为“列表理解”,这正是它的预期用途。返回名称错误:未定义全局名称“name”或未绑定LocalError:在赋值之前引用局部变量“name”,pythonic代码使用的理解多于
map
/
filter
@user2290820是否在末尾定义了两个循环<代码>名称
在理解中得到定义,其中表示
。。。对于范围(4)中的名称)]
@askewchan检查上面的更新。它适用于一种列表理解,但不适用于另一种方式zip(范围(4),范围(15))==zip(范围(4),范围(4)),如15>4@njzk您是对的,而且可能也不需要alist.append。我想您需要像
itertools.product()
这样的东西,而不是
zip()
我想您需要的是itertools.product而不是zip,在本例中,我只是继续嵌套它。zip(范围(4),范围(15))==zip(范围(4),范围(4)),作为15>4@njzk您是对的,而且可能也不需要alist.append。我想您需要像
itertools.product()
这样的东西,而不是
zip()
我想您需要的是itertools.product而不是zip,在这种情况下,我只是继续嵌套它。它的作用范围是(4)*15?几乎忘记了itertools.product,它完全可以容纳什么。但是,如果没有地图,我可以使用列表理解。有没有像map()和列表理解这样的东西使得map更慢?每个人似乎都不使用Map,我想知道Do_类(x[0],x[1])是否可以被Do_类(*x)取代我试过了。相反,x可以是一个dict来存储多个参数,如果它增加的话。但我的问题不在于此,而在于我的更新消息,其中1个列表理解是可能的,另一个“应该”发生,但它为什么不发生真的令人惊讶。这有什么作用(4)*15?差点忘了itertools.product完全适合什么。但是,如果没有地图,我可以使用列表理解。有没有像map()和列表理解这样的东西使得map更慢?每个人似乎都不使用Map,我想知道Do_类(x[0],x[1])是否可以被Do_类(*x)取代我试过了。相反,x可以是一个dict来存储多个参数,如果它增加的话。但我的问题不在于此,而在于我的更新消息,其中一个列表理解是可能的,另一个“应该”发生,但为什么它不发生,这真的很令人惊讶。