2016-06-14 36 views
-4

我有一個for循環,它將字符串列表中每個元素的子字符串與另一個字符串列表中的元素進行比較。將for循環轉換爲列表理解

mylist = [] 
for x in list1: 
    mat = False 
    for y in list2: 
     if x[:-14] in y: 
      mat = True 
    if not mat: 
     mylist.append(x) 

不過,我想將它放在一個列表理解(for循環不適合我的口味爲簡潔),但不能找到一種方法與mat計算去做。

我曾嘗試變化上:

mylist = [x for x in list1 if x[:-14] in list2] 

但是,這是不一樣的邏輯作爲原始循環。有沒有辦法將原來的循環改寫成列表理解?

+4

無,這不是一項轉換服務。如果您自己嘗試過並卡住了某處,請提供[mcve]。還要注意並不是所有的'for'循環都可以成爲列表解析。 – jonrsharpe

+1

我已經編輯了序言,因爲元內容不屬於問題,人們可以downvote他們是否給你一個答案/一個鏈接。它根本就不是*「顯而易見,這是一個問題,所以它可以應用於更廣泛的問題」*,**你真的要求你的一個例子被轉換**,沒有你自己的任何明顯的努力代表。 – jonrsharpe

+0

你想讓我提供我在這個網站上試過的所有其他東西的鏈接嗎?這就是你的陳述所要達到的目標。這是一個簡單的問題,我花費了更多的努力來證明我嘗試過,而不是回答這個問題。相當荒謬的迴應...我花了大概30分鐘搜索和嘗試之前發佈 – user3496060

回答

2

經上所記,沒有你不能直接把它寫成一個列表理解。

但是,如果您將mat的計算重寫爲單個表達式。 (在這種情況下,你可以使用any

mylist = [] 
for x in list1: 
    mat = any((x[:-14] in y) for y in list2) 
    if not mat: 
     mylist.append(x) 

然後直接將這一定義成if not條件:

mylist = [] 
for x in list1: 
    if not any((x[:-14] in y) for y in list2): 
     mylist.append(x) 

現在是非常簡單的轉換:

mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)] 
+0

朋友,你讀到問題的重點,並提供了一個簡潔的答案,其中包括從for循環轉換爲列表理解的方法。我只是試了一下,效果很好。信仰在SO =恢復! – user3496060

+1

@ user3496060我很高興我恢復了你的信仰,因爲你很明顯喜歡從例子中學習,我已經編輯了你的問題,我認爲這很適合SO(原本是非常本地化的,不太可能幫助未來的觀衆)我希望它能讓你更好地瞭解那種能夠更好地接受的問題,所以你不會再失去信心! –

-1

您正在尋找這樣的事情?:

mylist = [x for x in list1 if x[:-14] not in list2] 
+0

是的,我在發佈之前試過這個(發現另一個例子),它沒有奏效。 – user3496060