我有这样的情况:
#!/usr/bin/python2.7
y = [[0 for i in xrange(size_of_array)] for j in xrange(size_of_array)]
offset_flag = 0
for i in xrange(size_of_array):
for j in xrange(size_of_array):
y[i][j] = starting_no + j + offset_flag
offset_flag += j + 1
我想要嵌套for循环的列表理解,但它也应该处理如下情况:
offset_flag += j + 1
如何实现这种列表理解?
答案 0 :(得分:1)
您的整个代码可以替换为:
# Changing variables for cleaner expression:
# size_of_array -> s_a
# starting_no -> start
y = [[start + j + (i*s_a) for j in xrange(s_a)] for i in xrange(s_a)]
答案 1 :(得分:1)
只需使用乘法来计算偏移量:
y = [[starting_no + j + (i * size_of_array) for j in xrange(size_of_array)]
for i in xrange(size_of_array)]
可以使用较短的变量名更简洁地写出来:
start, size = starting_no, size_of_array
y = [[start + j + (i * size) for j in xrange(size)] for i in xrange(size)]
您的offset
值只不过是i * size_of_array
;您添加j + 1
的外部循环的每次迭代,但j
总是将设置为size_of_array - 1
。将j
替换为size_of_array - 1
,然后获得offset += size_of_array
。第一次迭代是0
,然后是1 * size_of_array
,一直到(size_of_array - 1) * size_of_array
,跟随i
变量。