簡體   English   中英

一一檢查列表中的每個值是否與另一個列表相同。 (蟒蛇 3)

[英]Checking if each values in list are identical to another list one by one. (Python 3)

例如,我們有 2 個列表:

list_1 = [12, 3, 45, 2, 50]
list_2 = [6, 3, 30, 5, 50]

正如我們所看到的,我們在兩個列表中有兩個相同的值。 我目前正在嘗試找出一個代碼,如果兩個值按順序相同,它將檢查列表中的每個值,並且它將返回 False 或 True。 (檢查每個列表的第一個值是否相同。在這種情況下,他們首先檢查 12 和 6 是否相同,由於它們不相同,它將返回 False。他們檢查下一個,如果 3 和3 是相同的,並且由於它是相同的,它們將返回 True。)

如果有人願意幫助我就好了。

只需將它們與==運算符進行比較。

您也可以將它們與map()all()

all(map(lambda x, y: x == y, list_1, list_2))

試試這個:

list_1 = [12, 3, 45, 2, 50]
list_2 = [6, 3, 30, 5, 50]

list_3 = [1, 2, 3, 4]
list_4 = [1, 2, 3, 4]

print(all(map(lambda x, y: x == y, list_1, list_2)))
print(all(map(lambda x, y: x == y, list_3, list_4)))

輸出:

False
True

您也可以手動比較元素:

def compare_lists(list_1, list_2):
    if(len(list_1) != len(list_2)):
        return False

    for i in range(len(list_1)):
        if list_1[i] != list_2[i]:
            return False

    return True

您可以使用all + zip()然后您可以將它們與==進行比較。

文檔

all(iterable) :如果可迭代對象的所有元素都為真(或者可迭代對象為空),則返回 True。

zip(*iterables) ; 制作一個迭代器,聚合來自每個可迭代對象的元素。

list_1 = [12, 3, 45, 2, 50]
list_2 = [6, 3, 30, 5, 50]

def check_lists(l1,l2):
    return all(x==y for x,y in zip(l1,l2))

print (check_lists(list_1,list_2))

或者,您可以直接比較它們

print(list_1==list_2)

我們可以使用 for 循環來實現這一點。 (我知道這種方法是老派,您可以通過使用 map() 和 all() 函數使用單線實現相同的效果)

我先寫完整的代碼。 然后我會解釋每個步驟。

(我假設列表將具有相同數量的元素。)

代碼:-

list_1 = [12, 3, 45, 2, 50]
list_2 = [12, 3, 45, 2, 50]

length = len(list_1)                    # STEP 1

result = True                           # STEP 2

for i in range(0, length):              # STEP 3
    if list_1[i] != list_2[i]:
        result = False
        break

print(result)                           # STEP 4

第1步

確定列表的長度。 這可以通過len()函數來完成。 len(list_1)將返回 list_1 的長度

第2步

聲明一個變量result來存儲結果。 將其初始化為True 通過這樣做,我們假設我們的列表是相同的。 如果它們不是那么我們將result的值更改為False

result = True

第 3 步

遍歷第一個列表中的每個元素,並將其與第二個列表中的相應元素進行比較。 如果它們不同,則將result的值更改為False並跳出for循環,因為無需檢查其他元素。

for i in range(0, length):
    if list_1[i] != list_2[i]:
        result = False
        break

第四步

打印出最終輸出print(result)

在這種情況下,他們首先檢查 12 和 6 是否相同,並且由於它們不相同,因此將返回 False。 他們檢查下一個,如果 3 和 3 相同,並且由於相同,他們將返回 True。

您可以使用itertools.zip_longest來迭代多個序列,並一次擁有它們的第 n 個項目,例如,在您的列表中將是 12 和 6,然后是 3 和 3,然后是 45 和 30,依此類推。

  • 這也將處理列表具有不同長度的情況。
from itertools import zip_longest

list_1 = [12, 3, 45, 2, 50]
list_2 = [6, 3, 30, 5, 50]

result = [
    value_1 == value_2
    for value_1, value_2 in zip_longest(list_1, list_2)
]
print(result)

輸出:

[False, True, False, False, True]

在這里,您可以看到(基於 1 的編號)第 2 個(值為 3)和第 5 個(值為 50)項是相同的,因此只有True

一種手動檢查和比較列表中每個值的手動方法。 list_1 = [12, 3, 45, 2, 50] list_2 = [6, 3, 30, 5, 50]

if(len(list_1) == len(list_1)):
    for i in range(0,len(list_1)):
        print(list_1[i] == list_2[i])
else:
    print(False) #note that If this line is executed we will get only one output  

這是結果:假真假假真

(已編輯)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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