【问题标题】:Nested list comprehension to flatten nested list嵌套列表理解以展平嵌套列表
【发布时间】:2018-04-16 06:29:31
【问题描述】:

我对 Python 还是很陌生,想知道如何使用列表推导来展平以下嵌套列表,以及如何使用条件逻辑。

nested_list = [[1,2,3], [4,5,6], [7,8,9]]

以下内容返回一个嵌套列表,但是当我尝试通过删除内部方括号来展平列表时,我得到了错误。

odds_evens = [['odd' if n % 2 != 0 else 'even' for n in l] for l in nested_list]

【问题讨论】:

    标签: python


    【解决方案1】:

    你的语法有点错误。试试下面的 sn-p。

    nested_list = [[1,2,3], [4,5,6], [7,8,9]]
    odds_evens = ['odd' if n % 2 != 0 else 'even' for l in nested_list for n in l]
    print(odds_evens)
    

    输出:

    ['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
    

    Nested List Comprehension

    【讨论】:

      【解决方案2】:

      从嵌套列表中读取数据并根据条件输出到平面列表中

      nested_list = [[1,2,3], [4,5,6], [7,8,9]]
      
      flat_list = [item for sublist in nested_list for item in sublist]
      # >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
      
      flat_list_even = [item for sublist in nested_list for item in sublist if item % 2 == 0]
      # >>> [2, 4, 6, 8]
      
      
      flat_list_odd = [item for sublist in nested_list for item in sublist if item % 2 != 0]
      # >>> [1, 3, 5, 7, 9]
      
      flat_list_literal = ["even" if item % 2 == 0 else "odd" for sublist in nested_list for item in sublist]
      # >>> ['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
      

      【讨论】:

        【解决方案3】:

        这里有什么问题?

        >>> nested_list = [[1,2,3], [4,5,6], [7,8,9]]
        >>> odds_evens = ['odd' if n % 2 != 0 else 'even' for 1 in nested_list for n in 1]
          File "<stdin>", line 1
        SyntaxError: can't assign to literal
        

        【讨论】:

          【解决方案4】:

          要创建一个平面列表,您需要在理解代码中有一组括号。试试下面的代码:

          odds_evens = ['odd' if n%2!=0 else 'even' for n in l for l in nested_list]

          输出:

          ['odd', 'odd', 'odd', 'even', 'even', 'even', 'odd', 'odd', 'odd']

          【讨论】:

            猜你喜欢
            • 2017-11-09
            • 1970-01-01
            • 1970-01-01
            • 2018-07-04
            • 2020-10-11
            • 1970-01-01
            • 1970-01-01
            • 2011-12-24
            • 1970-01-01
            相关资源
            最近更新 更多