什么是这个嵌套循环的Python列表理解?

时间:2016-12-30 18:46:06

标签: python python-2.7 list-comprehension

我有这样的情况:

#!/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

如何实现这种列表理解?

2 个答案:

答案 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变量。