【发布时间】:2014-04-13 08:58:18
【问题描述】:
我有以下代码:
neig = []
for _ in xrange(number):
r = random.randint(0,self._tam-1)
s = random.randint(0,self._tam-1)
neig.append([r,s, self.deltaC(r, s)])
我正在尝试使用 map、生成器或其他东西来优化列表的构建来摆脱 for 循环。我检查了this answer,但就我而言,我需要为元素赋值。
是否可以使用生成器并延迟对deltaC 的调用?我认为使用map 是不可能的,因为循环体有多个语句。
【问题讨论】:
-
“延迟调用
deltaC”是什么意思?您什么时候需要该值;您是否需要neig中的所有值,并且不止一次? -
稍后我将在程序中使用
deltaC的值。如果我有这个列表 [1,2,deltaC(1,2)] 列表中的一个元素,¿以后可以评估吗?也许我误解了生成器的概念。如果延迟调用是不可能的,我怎样才能更有效地生成这个数组? -
您会多次使用该值吗?如果没有,您可以将
r和s存储在列表中,然后在需要该值的地方调用deltaC(r, s)。哪个更重要 - 运行时间还是内存使用? -
“更有效地生成这个数组” - 你能澄清一下你所说的更有效是什么意思,即当前方法有什么问题?是因为
deltaC返回了一个非常庞大的结构,还是number非常大,以至于无法将整个列表保留到内存中?如果是这种情况,生成器可能会有所帮助。