2017-07-04 56 views
2

我想比較兩個字符串列表,找到常用字符串並將常用字符串存儲在新列表中。將兩個字符串列表相互比較Python

例如:

my_list1=['  4,   -40.,   -12.\n', 
'  5,   -40.,   -15.\n', 
'  6,   -40.,   -18.\n', 
'  7,   -40.,   -21.\n', 
'  8,   -40.,   -24.\n', 
'  9,   -40.,   -27.\n', 
'  14,   -30.,   -30.\n', 
'  15,   -28.,   -30.\n'] 

my_list2=['49', 
'50', 
'51', 
'10', 
'53', 
'54', 
'55', 
'56', 
'57', 
'58', 
'59', 
'60', 
'6162', 
'15', 
'64', 
'65', 
'66'] 

我想要做的就是在my_list1字符串的開頭比較每個my_list2的字符串。

例如my_list1包含'15'my_list2[ '15, -28., -30.\n'],所以我想這是要保存所有常見字符串

+1

這被稱爲獲取列表的交集順便說一句。 Python可能已經有了一個內置函數。 – Carcigenicate

+0

[使用NLTK清除停用詞]的可能重複(https://stackoverflow.com/questions/19130512/stopword-removal-with-nltk) –

回答

3

您可以使用str.startswith可以採取項目作爲參數的元組的新列表。 左條每個在第一個列表項,並檢查項目startswith任意在第二列表中的字符串的:

t = tuple(my_list2) 
lst = [x for x in my_list1 if x.lstrip().startswith(t)] 
print lst 
# ['  15,   -28.,   -30.\n'] 
+0

很好的使用'startswith()'那裏。 +1。用'any()'會慢嗎?像'lst = [x for my_list1(如果有的話)(x.lstrip()。startswith(y)for my_list2)]'。它應該是同樣的東西,對吧? –

+0

@ Ev.Kounis不,它不會。一個單獨的調用(儘管帶有一個參數元組)會比** gen中的一個'* n'調用快得多。 exp。**由'any'包裝。 –

0
my_list1_new = [i.strip().split(",")[0] for i in my_list1 ] 
for i in my_list2: 
    if i in my_list1_new: 
     print(my_list1[my_list1_new.index(i)])