【问题标题】:python nested list comprehensionspython嵌套列表推导
【发布时间】:2015-06-29 20:37:57
【问题描述】:

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

【问题讨论】:

  • 只是为了好玩,请注意,您可以使用zip(*matrix) 生成这些结果。

标签: python list list-comprehension nested-lists


【解决方案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”是同一个变量吗?它们同时增加吗?

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

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

【讨论】:

    【解决方案2】:

    我创建了一个函数来自动执行(对不起,这个例子是我从别人那里得到的):

    比方说,你有这个例子:

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

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2023-03-06
      • 2017-02-17
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多