Skip to main content
 首页 » 编程设计

python之对列表的两个连续值执行任何操作

2025年05月04日24JeffreyZhao

我有一个 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]