簡體   English   中英

將For循環轉換為列表理解:測試列表2中的元素是否與列表1中的元素部分匹配

[英]Convert For Loop to List Comprehension: Testing if elements in list 2 are partial match for elements in list 1

這里有點像python / programming newbie,

我想出了2個嵌套的for循環代碼,以測試第二個循環的元素是否與第一個列表中的元素部分匹配(或完全匹配),如果是,則將這些元素從第一個列表中刪除。 這是代碼:

>>> lst = ["my name is Bob Jenkins", "Tommy Cooper I am", "I be Bazil", "I Tarzan"]
>>> names = ["Bob", "Tarzan"]
>>> for l in lst:
        for n in names:
            if n in l:
                lst.remove(l)


>>> print lst
['Tommy Cooper I am', 'I be Bazil']

這里的問題是我實際上並不想修改lst ,而是創建一個新列表。 因此,列表理解能力得到了提高。 但是,我無法弄清列表理解來實現這一目標。 我已經嘗試過[i for i in lst for n in names if n not in i]但這不起作用。 當然.remove方法不是用於列表理解的。 在過去的一個小時里,我一直感到困惑,但是什么都想不出來。

有任何想法嗎?

我會使用any內置函數:

newlst = [i for i in lst if not any(name in i for name in names)]

如果願意,使用all此表達式是等效的:

newlst = [i for i in lst if all(name not in i for name in names)]

你去了:):

lst = ["my name is Bob Jenkins", "Tommy Cooper I am", "I be Bazil", "I Tarzan"]
names = ["Bob", "Tarzan"]

new=[a for a in lst if all(x not in a for x in names) ]
print new

為了完整性,請filter

filter(lambda s: not any(x in s for x in names),lst)
Out[4]: ['Tommy Cooper I am', 'I be Bazil']

對於python 3, list(filter)

list(filter(lambda s: not any(x in s for x in names),lst))
Out[4]: ['Tommy Cooper I am', 'I be Bazil']

暫無
暫無

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

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