在python中翻转布尔值列表列表

时间:2017-09-11 04:21:24

标签: python list for-loop boolean

考虑列表清单:

Intent intent = getIntent();
finish();
startActivity(intent);

我想在这里翻转所有布尔值,并希望得到

if (android.os.Build.VERSION.SDK_INT >= 11){
//Code for recreate
recreate();

}else{
//Code for Intent
Intent intent = getIntent();
finish();
startActivity(intent);
}

我知道我可以遍历列表中的每个列表并执行list =[[False, True], [True, False], [ False, False]] 之类的操作,但我正在寻找一种有效的方法,而无需调用flipped_list =[[True,False], [False,True], [True, True]]

5 个答案:

答案 0 :(得分:4)

map(lambda l1: map(lambda x: not x, l1), list)

答案 1 :(得分:1)

在这种情况下,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级嵌套。

答案 2 :(得分:0)

not_flipped_list = [[not pair[0], not pair[1]] for pair in flipped_list]

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

答案 3 :(得分:0)

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

这最终会看起来像

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

答案 4 :(得分:0)

以下是使用地图

的解决方案的演示
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]]
>>>