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中