2016-09-28 226 views
7

我看到下面的代碼可以檢查一個詞是比較列表字符串字符串列表

list1 = 'this' 
compSet = [ 'this','that','thing' ] 
if any(list1 in s for s in compSet): print(list1) 

現在我要檢查,如果列表中的一個字是如下一些其他列表:

list1 = ['this', 'and', 'that' ] 
compSet = [ 'check','that','thing' ] 

什麼是最好的方法來檢查是否在list1中的單詞是在compSet,並做一些事情在不存在的元素,例如,追加'和'compSet或從list1刪除'和'?

__________________update___________________

我剛剛發現,做同樣的事情沒有與sys.path的工作。下面的代碼有時會將路徑添加到sys.path中,有時不會。

myPath = '/some/my path/is here' 
if not any(myPath in s for s in sys.path): 
    sys.path.insert(0, myPath) 

爲什麼這不起作用?此外,如果我想在一組路徑上執行相同的操作,則可以使用

myPaths = [ '/some/my path/is here', '/some/my path2/is here' ...] 

我該怎麼做?

+0

重新您的更新,有什麼不工作?它是否給出錯誤?也許你只是不在你的'myPath'變量中使用反斜槓? – brianpck

+0

@brianpck謝謝,我更新了。上面向sys.path添加路徑的函數工作不一致。它有時有效,有時不起作用。也許這是我的環境的一個特定問題,我猜...順便說一句,如果我這樣做,將路徑添加到sys.path路徑列表中,Intersection函數是最好的辦法嗎? – noclew

+0

如果你想找到兩個列表中的路徑,那麼是的,交集是最好的方法。關於'sys.path',我建議問另一個問題,如果這是一個問題,因爲它是一個單獨的問題。 – brianpck

回答

8

有一個簡單的方法來檢查兩個列表的交集:將它們轉換爲一組,並使用intersection

>>> list1 = ['this', 'and', 'that' ] 
>>> compSet = [ 'check','that','thing' ] 
>>> set(list1).intersection(compSet) 
{'that'} 

您還可以使用按位運算符:

交叉路口:

>>> set(list1) & set(compSet) 
{'that'} 

聯盟:

>>> set(list1) | set(compSet) 
{'this', 'and', 'check', 'thing', 'that'} 

你可以任意的這些結果的使用list()列表。

+0

非常感謝! – noclew

+0

嗨,布賴恩,我剛剛更新了我的問題。你可以看看它嗎? – noclew

1

試一下:

>>> l = list(set(list1)-set(compSet)) 
>>> l 
['this', 'and'] 
+0

只是爲了澄清;這是顯示'list1'中的單詞,*不是'compSet'中的*,而不是其中的單詞。 –