python嵌套列表推导

时间:2015-06-29 20:37:57

标签: python list list-comprehension nested-lists

我正在学习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]

2 个答案:

答案 0 :(得分:1)

[[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)


  

是第一个" i"第二个"我"相同的变量,它们是否同时增加?

当然,确实如此。如果它不是i,则代码会抛出错误,因为两者中的一个不会被定义。

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

答案 1 :(得分:0)

我做了一个函数来自动执行它(例如,很抱歉,我是从某人那里获得的):

比方说,你有这个例子:

# 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 ]