python 嵌套列表理解

python nested list comprehensions

我正在学习 python 并学习他们的教程。我理解列表理解和嵌套列表理解。不过,使用以下代码,我试图了解事件的顺序。

>>> matrix = [
...[1, 2, 3, 4],
...[5, 6, 7, 8],
...[9, 10, 11, 12],
... ]
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4,8,12]]

根据嵌套列表理解,第一个"i"和第二个"i"是同一个变量吗?它们是否同时增加?我想我不明白生成的大列表是如何从第一个子列表 [1, 5, 9] 到第二个子列表 [2, 6, 10]

[[row[i] for row in matrix] for i in range(4)]

相当于

my_list = []
for i in range(4):
    my_list_2 = []
    for row in matrix:
        my_list_2.append(row[i])
    my_list.append(my_list_2)


is the first "i" and the second "i" the same variable and do they both increase at the same time?

当然是。如果不相同 i,代码将抛出错误,因为不会定义两者之一。

您可能对这个问题感兴趣:Understanding nested list comprehension

我做了一个函数以便自动执行(抱歉这个例子,我是从别人那里拿来的):

比方说,你有这个例子:

# 2-D List 
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] 
  
flatten_matrix = [] 
  
for sublist in matrix: 
    for val in sublist: 
        flatten_matrix.append(val) 

这是我的职能: (首先,将示例转换为将发送给函数的字符串)

x = "for sublist in matrix:for val in sublist:flatten_matrix.append(val)"

然后函数:

def ComprenhensionizeList(nested_for_loop_str):

    splitted_fors = nested_for_loop_str.split(':')
    lowest_val = splitted_fors[1].split(' ')[1]
    comprehensionizer = '[ '+ lowest_val+' '+splitted_fors[0]+' '+splitted_fors[1]+' ]'
    print(comprehensionizer)

和输出:

[ val for sublist in matrix for val in sublist ]