簡體   English   中英

對列表的兩個連續值執行任何操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM