Python 转换为循环到列表理解:测试列表2中的元素是否与列表1中的元素部分匹配
有点像python/编程新手 我已经提出了一个2个嵌套for循环的代码来测试第二个循环的元素是否和第一个列表中的元素部分(或完全)匹配,如果是这样,这些元素将从第一个列表中删除。代码如下:Python 转换为循环到列表理解:测试列表2中的元素是否与列表1中的元素部分匹配,python,list,for-loop,list-comprehension,Python,List,For Loop,List Comprehension,有点像python/编程新手 我已经提出了一个2个嵌套for循环的代码来测试第二个循环的元素是否和第一个列表中的元素部分(或完全)匹配,如果是这样,这些元素将从第一个列表中删除。代码如下: >>> lst = ["my name is Bob Jenkins", "Tommy Cooper I am", "I be Bazil", "I Tarzan"] >>> names = ["Bob", "Tarzan"] >>> for l in l
>>> 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在lst中表示I在names中表示n,如果n不在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)]
我会使用
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)]
我会使用
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)]
我会使用
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)]
好了:):
好了:):
好了:):
好了:):
为完整起见,
过滤器
:
filter(lambda s: not any(x in s for x in names),lst)
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
list(filter(lambda s: not any(x in s for x in names),lst))
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
对于python 3,列表(过滤器)
:
为完整起见,
过滤器
:
filter(lambda s: not any(x in s for x in names),lst)
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
list(filter(lambda s: not any(x in s for x in names),lst))
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
对于python 3,列表(过滤器)
:
为完整起见,
过滤器
:
filter(lambda s: not any(x in s for x in names),lst)
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
list(filter(lambda s: not any(x in s for x in names),lst))
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
对于python 3,列表(过滤器)
:
为完整起见,
过滤器
:
filter(lambda s: not any(x in s for x in names),lst)
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
list(filter(lambda s: not any(x in s for x in names),lst))
Out[4]: ['Tommy Cooper I am', 'I be Bazil']
对于python 3,列表(过滤器)
:
这不是对您的问题的回答,而是对您当前解决方案的评论:在遍历列表时,您不应该修改列表(例如删除元素)。不过,你可以反复阅读它的副本,例如:对于lst[:]:lst.remove(l)中的l,谢谢你提供的信息@Lazarus-非常有用我发现所有3个答案(到目前为止)都同样有用,因此我无法选择它们作为这方面的最佳答案。然而,我将接受darkryder,原因很简单,他/她需要一些要点:-)它们几乎是等价的。这不是对你的问题的回答,而是对你当前解决方案的评论:你不应该在遍历列表时修改列表(如删除元素)。不过,你可以反复阅读它的副本,例如:对于lst[:]:lst.remove(l)中的l,谢谢你提供的信息@Lazarus-非常有用我发现所有3个答案(到目前为止)都同样有用,因此我无法选择它们作为这方面的最佳答案。然而,我将接受darkryder,原因很简单,他/她需要一些要点:-)它们几乎是等价的。这不是对你的问题的回答,而是对你当前解决方案的评论:你不应该在遍历列表时修改列表(如删除元素)。不过,你可以反复阅读它的副本,例如:对于lst[:]:lst.remove(l)中的l,谢谢你提供的信息@Lazarus-非常有用我发现所有3个答案(到目前为止)都同样有用,因此我无法选择它们作为这方面的最佳答案。然而,我将接受darkryder,原因很简单,他/她需要一些要点:-)它们几乎是等价的。这不是对你的问题的回答,而是对你当前解决方案的评论:你不应该在遍历列表时修改列表(如删除元素)。不过,你可以反复阅读它的副本,例如:对于lst[:]:lst.remove(l)中的l,谢谢你提供的信息@Lazarus-非常有用我发现所有3个答案(到目前为止)都同样有用,因此我无法选择它们作为这方面的最佳答案。然而,我将接受darkryder,原因很简单,他/她需要一些要点:-)它们几乎是等价的。