[英]Perform any operation on two consecutive values of the 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個列表只有偶數個索引
2列表可以具有偶數或奇數個索引
有人可以為這兩種情況建議一個簡單的捷徑(最好是通過列表理解或地圖)
對於偶數和奇數長度列表,都可以將itertools.izip_longest()
與列表 itertools.izip_longest()
表達式配合使用:
>>> 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
。 如文件所述 :
如果可迭代對象的長度不均勻,則用
fillvalue
填充缺失值。
對於奇數長度列表,如果要保持列表的最后一個值不變,則必須將fillvalue
設置為truthList[-1]
。
對於僅偶數列表, 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]
解決這個問題的一種蠻力方法是,如果元素數量奇數,則將最后一項附加到列表的末尾。 這樣,我們得到輸出列表中的最后一個元素l[n - 1] and 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)
您可以將map()
與operator.and_()
如下所示:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.