[英]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.