【问题标题】:How to convert a list comprehension to a nested loop?如何将列表推导转换为嵌套循环?
【发布时间】:2021-03-10 14:18:36
【问题描述】:

我正在查看一些 Python 代码,并在代码中找到了这一行:

data = [[int(x) for x in list] for list in values]  

此代码基本上将字符串转换为嵌套列表值中的整数。例如:

values = [['8', '1', '1', '0', '1', '1', '0', '0'], ['9', '0', '0', '1', '0', '0', '1', '0']] 

输出变成:

data = [[8, 1, 1, 0, 1, 1, 0, 0], [9, 0, 0, 1, 0, 0, 1, 0]]

此时 for 循环是一个嵌套的 for 循环,它看起来“复杂”,如果我想将其转换为“常规”for 循环,那么它变得更容易遵循但仍然可以完成相同的工作怎么办? 这段代码会是什么样子?

【问题讨论】:

标签: python


【解决方案1】:
 data = [[int(x) for x in list] for list in values] 

这个 sn-p 是一个列表推导,要使用 for 循环,你必须这样做:

data[]
for list in values:
    y = []
    for x in list:
         y.append(int(x))
    data.append(y)

【讨论】:

    【解决方案2】:

    在 cmets 中查找解释

    #data = [[int(x) for x in list] for list in values]  
    values = [['8', '1', '1', '0', '1', '1', '0', '0'], ['9', '0', '0', '1', '0', '0', '1', '0'], ['10', '0', '0', '1', '0', '0', '1', '0'], ['11', '0', '0', '0', '0', '0', '0', '0'], ['12', '0', '0', '0', '0', '0', '0', '0'], ['13', '0', '0', '0', '0', '0', '0', '0'], ['14', '0', '0', '0', '0', '0', '0', '0'], ['15', '0', '0', '0', '0', '0', '0', '0'], ['16', '0', '0', '0', '1', '0', '2', '3'], ['17', '1', '1', '2', '0', '1', '1', '0'], ['18', '1', '0', '0', '2', '1', '1', '2']] 
    
    # it is similar to 
    final_list = []
    for list_ in values:
        # iterate over the values
        temp = []
        for c in list_:
            temp.append(int(c))
        final_list.append(temp) # be cautious you can caught with shallow copy sometime, safe side use final_list.append(temp.copy())
        
    print(final_list)
    
    [[8, 1, 1, 0, 1, 1, 0, 0], [9, 0, 0, 1, 0, 0, 1, 0], [10, 0, 0, 1, 0, 0, 1, 0], [11, 0, 0, 0, 0, 0, 0, 0], [12, 0, 0, 0, 0, 0, 0, 0], [13, 0, 0, 0, 0, 0, 0, 0], [14, 0, 0, 0, 0, 0, 0, 0], [15, 0, 0, 0, 0, 0, 0, 0], [16, 0, 0, 0, 1, 0, 2, 3], [17, 1, 1, 2, 0, 1, 1, 0], [18, 1, 0, 0, 2, 1, 1, 2]]
    

    【讨论】:

      【解决方案3】:

      当前的循环架构如下所示:

      data = []
      for word in values:
          nested_list = []
          for x in word:
              nested_list.append(int(x))
          data.append(nested_list)
      

      我建议使用列表推导并尽量避免使用 Reserved Keywords 命名变量,例如 list、if、elif

      我看到已经有现成的答案,但尝试过)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 2020-12-18
        • 1970-01-01
        • 2016-04-24
        • 2021-12-30
        • 2016-03-26
        相关资源
        最近更新 更多