【问题标题】:Flip boolean values list of lists in python翻转python中列表的布尔值列表
【发布时间】:2018-02-19 05:58:01
【问题描述】:

考虑列表列表:

list =[[False, True], [True, False], [ False, False]]

我想把这里所有的布尔值都翻转过来,想得到

flipped_list =[[True,False], [False,True], [True, True]]

我知道我可以遍历列表中的每个列表并执行[not i for i in child_list] 之类的操作,但我正在寻找一种无需调用for-loop 的高效方法

【问题讨论】:

    标签: python list for-loop boolean


    【解决方案1】:

    这是一个使用地图的解决方案的演示

    bash-3.2$ python
    Python 2.7.12 (default, Nov 29 2016, 14:57:54) 
    [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    
    >>> l = [[False, True], [True, False], [False, False]]
    >>> l
    [[False, True], [True, False], [False, False]]
    
    >>> map(lambda x:map(lambda y:not y, x),l)
    [[True, False], [False, True], [True, True]]
    >>>
    

    【讨论】:

      【解决方案2】:

      你可以做的是添加一个包装函数/对象来提取值。然后函数/对象可以跟踪是否翻转值。

      这最终会看起来像

      vals [0][0] #True
      setFlipCond(true) #Sets some variable keeping track of flipping
      extractVal(0,0) #False
      

      【讨论】:

        【解决方案3】:
        map(lambda l1: map(lambda x: not x, l1), list)
        

        【讨论】:

          【解决方案4】:
          not_flipped_list = [[not pair[0], not pair[1]] for pair in flipped_list]
          

          是我能告诉你的最好的,假设列表如你所显示,由一些布尔值对组成。您将至少有一个 for 循环,而我只是通过在理解中硬编码第二个列表大小来避免另一个循环。

          【讨论】:

            【解决方案5】:

            在这种情况下,for 循环可能不是一个非常糟糕的解决方案。

            但是,这是使用列表推导的一种解决方案

            >>> nested_list = [[False, True], [True, False], [ False, False]]
            >>> [[not x for x in list_of_bools] for list_of_bools in nested_list]
            [[True, False], [False, True], [True, True]]
            

            这是假设它只是一个 2 级嵌套。

            【讨论】:

              猜你喜欢
              • 2012-04-08
              • 2019-01-06
              • 2011-12-22
              • 1970-01-01
              • 2015-01-21
              • 1970-01-01
              • 2020-08-29
              • 2016-09-28
              • 1970-01-01
              相关资源
              最近更新 更多