Python 对列表中的两个连续值执行任何操作

Python 对列表中的两个连续值执行任何操作,python,arraylist,Python,Arraylist,我有一张单子 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列表只有偶数个索引 2列表可以有偶数或

我有一张单子

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列表只有偶数个索引

2列表可以有偶数或奇数个索引

有人能为这两种情况提供一个简单的快捷方式吗(最好是通过列表理解或映射)

对于偶数和奇数长度的列表,您可以使用列表压缩表达式:

>>> 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
。俗话说:

如果iterables的长度不均匀,则缺少的值将用
fillvalue
填充

对于奇数长度列表,如果希望保持列表的最后一个值不变,则必须将
fillvalue
设置为
truthList[-1]


对于偶数列表,满足以下要求:

>>> 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]
对于偶数和奇数长度的列表,可以使用with 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
。俗话说:

如果iterables的长度不均匀,则缺少的值将用
fillvalue
填充

对于奇数长度列表,如果希望保持列表的最后一个值不变,则必须将
fillvalue
设置为
truthList[-1]


对于偶数列表,满足以下要求:

>>> 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]
您可以使用以下选项:

import operator

map(operator.and_, truthList[::2], truthList[1::2])
如果列表长度为奇数,则可以执行以下操作:

result = map(operator.and_, truthList[:-1:2], truthList[1:-1:2])
然后,如果要为最后一个值添加
False

result.append(False)
完整的代码是:

def my_and(my_list):
    if len(my_list) % 2:
        result = map(operator.and_, my_list[:-1:2], my_list[1:-1:2])
        result.append(False)
        return result
    return map(operator.and_, my_list[::2], my_list[1::2])
输出:

>>> truth_list1 = [True,False,False,False,True,False,True,True]
>>> my_and(truth_list1)
[False, False, False, True]
>>> 
>>> truth_list2 = [True,False,False,False,True,False,True,True,True]
>>> my_and(truth_list2)
[False, False, False, True, False]
您可以使用以下选项:

import operator

map(operator.and_, truthList[::2], truthList[1::2])
如果列表长度为奇数,则可以执行以下操作:

result = map(operator.and_, truthList[:-1:2], truthList[1:-1:2])
然后,如果要为最后一个值添加
False

result.append(False)
完整的代码是:

def my_and(my_list):
    if len(my_list) % 2:
        result = map(operator.and_, my_list[:-1:2], my_list[1:-1:2])
        result.append(False)
        return result
    return map(operator.and_, my_list[::2], my_list[1::2])
输出:

>>> truth_list1 = [True,False,False,False,True,False,True,True]
>>> my_and(truth_list1)
[False, False, False, True]
>>> 
>>> truth_list2 = [True,False,False,False,True,False,True,True,True]
>>> my_and(truth_list2)
[False, False, False, True, False]

如果我们有奇数个元素,一种蛮力方法就是将最后一项追加到列表的末尾。这样我们就得到了输出列表中最后一个元素的
l[n-1]和l[n-1]

l = [True, False, False, False, True, False, True, True]
if len(l) % 2 == 1:
    l.append(l[-1])
l_sort = [ l[i] and l[i + 1] for i in range(0, len(l), 2)] 
print(l_sort)

如果我们有奇数个元素,一种蛮力方法就是将最后一项追加到列表的末尾。这样我们就得到了输出列表中最后一个元素的
l[n-1]和l[n-1]

l = [True, False, False, False, True, False, True, True]
if len(l) % 2 == 1:
    l.append(l[-1])
l_sort = [ l[i] and l[i + 1] for i in range(0, len(l), 2)] 
print(l_sort)

@HassanK:更新了答案,那么这会使列表的最后一个元素默认为False吗?@HassanK:它有一个
fillvalue
参数,您可以根据需要的行为将该参数设置为
True
/
False
。当前它被设置为
False
。这意味着;在奇数长度列表的情况下,它将使用
value@HassanK:以防您希望保持最后一个元素的值不变。您可以将
fillvalue
设置为
truthList[-1]
@HassanK:更新了答案,那么这会使列表的最后一个元素默认为False吗?@HassanK:它有一个
fillvalue
参数,您可以根据需要的行为将该参数设置为
True
/
False
。当前它被设置为
False
。这意味着;在奇数长度列表的情况下,它将使用
value@HassanK:以防您希望保持最后一个元素的值不变。您可以将
fillvalue
设置为
truthList[-1]
@HassanK查看编辑,我添加了该示例。这取决于您想对列表的最后一个元素做什么,在上面的示例中,我只是将其添加到
result
list@HassanK看看编辑,我添加了该案例的示例。这取决于您想对列表的最后一个元素做什么,在上面的示例中,我只是将它添加到
result
list中