python: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(map(.....也许里面有多个地图?))


更新:


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中最笨拙的事情


狐的传说
浏览 222回答 3
3回答

30秒到达战场

我会用itertools.product:from itertools import productalist = [Do_Class(x[0], x[1]) for x in product(range(4), range(15))]如果您绝对需要map: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)编辑需要对range(4)* 15进行排序以获得0,0,0,...,1,...而不是0,1,2,3,0,...编辑2我偶然发现itertools.starmap,它应该显示以下内容:from itertools import starmapfrom itertools import productalist = 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仅当您可以执行类似操作时才使用map(somefunc, somelist)。如果不是这种情况,则您需要一个lambda,与列表理解相比,它只会增加不必要的开销。

守候你守候我

alist = map(lambda name : map(lambda sname : Do_Class(name, sname), range(15)), range(4)) #please don't do this
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python