我有一个 list
truthList = [True,False,False,False,True,False,True,True]
我想“和”这个列表的两个后续索引。
output[0]=truthList[0] and truthList[1]
output[1]=truthList[2] and truthList[3]
....
“Anding”上面的列表将给出以下输出
output = [False,False,False,True]
有两种情况
1 List 只有偶数个索引
2 列表可以有偶数个或奇数个索引
有人可以为这两种情况建议一个简单的捷径吗(最好是通过列表理解或 map )
请您参考如下方法:
对于偶数 和奇数 长度列表,您可以使用itertools.izip_longest() list comprehesnion 表达式为:
>>> from itertools import izip_longest
>>> truthList = [True,False,False,False,True,False,True,True, False]
# jumping the list by 2 v
>>> [i and j for i, j in izip_longest(truthList[::2], truthList[1::2], fillvalue=False)]
# Does `and` with `False` as pair up for last entry in case of `odd` list ^
[False, False, False, True, False]
在这里,您需要根据您需要的行为将fillvalue 参数的值设置为True/False。作为document说:
If the iterables are of uneven length, missing values are filled-in with
fillvalue.
对于奇数长度的列表,如果你想保留列表的最后一个值,那么你必须将fillvalue设置为truthList[-1]。
对于 even 列表,zip将满足要求:
>>> truthList = [True,False,False,False,True,False,True,True]
>>> [i and j for i, j in zip(truthList[::2], truthList[1::2])]
[False, False, False, True]
