2016-11-18 72 views
0

我想寫一個函數,將字符串匹配和比較兩個字符串之間的python 3,基本上第二個列表是驗證,所以如果列表1中的任何項目不是在列表2我想拋出一個錯誤。如果它有任何不同,list1是來自CSV文件,我設法讓行進入正確的位置。比較列表與另一個val列表Python 3

我很新,有點迷路。 EG:

list1 = ["a", "B", "AB"] 
list2 = ["a","B","abc"] 

因此,「AB」從直到有人有固定的CSV文件,因爲「AB」的心不是在列表2列表1應關閉程序

list1 = ["a", "b"] 
list2 = ["b", "a"] 

這應該通過,因爲他們都是在這兩個列表中

list1可能有多個相同的字符串,我嘗試了所有我能想到的。 任何幫助表示讚賞:)

+0

他們需要有相同的尺寸還是可以比另一個更大? –

+0

elethans答案下面爲我工作使用集,我想能夠有錯誤檢查成長爲我的CSV文件,但如果奇怪的東西進入它,那麼它會拋出錯誤 –

回答

1

不像例如JavaScript,你可以在Python比較==列表和潛在回來True即使它們不是同一個對象:

In [1]: list1 = ["a", "B", "AB"] 

In [2]: list2 = ["a","B","abc"] 

In [3]: list1 == list2 
Out[3]: False 

In [4]: list3 = ["a", "B", "AB"] 

In [5]: list1 == list3 
Out[5]: True 

如果名單可能潛在地相同,但可能不是相同的順序,您可以比較排序列表。

In [6]: list4 == list1 
Out[6]: False 

In [7]: sorted(list4) == sorted(list1) 
Out[7]: True 

所以,你可以這樣做:

def same_list(l1, l2): 
    return sorted(l1) == sorted(l2) 

如果你從字面上想如果列表不等於引發錯誤,你可以使用raise MyErrorsame_list()函數內,或者用它如果該函數返回False

列表1可以多次

具有相同的字符串,如果你想有一個情況,如:

list1 = ["a", "b", "a", "b", "b"] 
list2 = ["b", "a"] 

引發錯誤,你可以使用set()

set(list1) == set(list2) # This will evaluate to True for the lists above 

這將比較兩個列表中的獨特元素,忽略重複項(還要注意排序不需要集合)。

+0

嘿,我實際上找到了一種不同的方式來解決我自己的問題(至少對我來說) 我做了一個關鍵列表,現在當信息從CSV文件輸入時,程序使用for循環來檢查它是否在列表中,如果它不是,則拋出錯誤在關鍵列表中...但感謝你的幫助人 –