Python 在两个列表中查找公共元素
我有两份清单:Python 在两个列表中查找公共元素,python,list,Python,List,我有两份清单: list_1 = ['rwww corp\pan 2323 2018-23-23 0% c:\program files\pa.txt', 'rwww corp\pand 2323 2018-23-23 0% c:\program files\monkey.txt'] list_2 = ['c:\program files\pa.txt'] 我想知道列表1中是否有列表2元素,如果有,然后打印出来 在这种情况下,list_2元素位于list_1的索引0处,如何使用一个线性函数来
list_1 = ['rwww corp\pan 2323 2018-23-23 0% c:\program files\pa.txt', 'rwww corp\pand 2323 2018-23-23 0% c:\program files\monkey.txt']
list_2 = ['c:\program files\pa.txt']
我想知道列表1中是否有列表2元素,如果有,然后打印出来
在这种情况下,list_2元素位于list_1的索引0处,如何使用一个线性函数来实现这一点
通过使用两个for循环,我有一种很无聊的方法:
for e in list_1:
for k in list_2:
if k in e:
print e
这相当于使用列表理解的循环:
[print e for e in list_1 for k in list_2 if k in e]
@Petpan,您可以使用
列表理解来满足您的需求
您不应该为此使用列表理解
在网上试试吧
»输出
c:\program files\pa.txt exists in list_1
c:\program files\pex2.txt exists in list_1
首先我会查看itertools.product()
,然后我不会使用列表理解副作用,例如:
import itertools as it
print '\n'.join(e for e, k in it.product(list_1, list_2) if k in e)
我也会考虑查< <代码> >未来> >代码>使用<代码> PrimtType < /C> >,例如:
from __future__ import print_function
import itertools as it
print('\n'.join(e for e, k in it.product(list_1, list_2) if k in e))
为什么要在此处使用列表理解
?它基本上用于创建新列表。你可以用,但不应该用。对于带条件的循环,它也具有相同的属性。这与您的问题无关,但我注意到您在字符串中使用\字符作为目录分隔符-如果后面的字符恰好是特殊字符,如b、n、r,则这是危险的。使用一个原始字符串、两个反斜杠或一个正斜杠/。您真的只想在此处打印元素,还是想将它们存储在新列表中?只有在列表理解是后者时,才应该使用列表理解。不鼓励仅理解副作用(如打印)-请参阅:如果列表_1中的列表_2[0]:
,则有什么问题?如果您有更多,则转换为集合
并使用集合
操作此处显示的列表例如,我有一个大列表,不可能提及它们的索引。通常不赞成使用列表理解的副作用,例如打印
@spejsy,您是否正确测试了代码。我查过了。它没有给出正确的结果。您正在从2个列表中选择2个项目,并在
中使用(基本上与list、tuple、dict等一起使用)。
from __future__ import print_function
import itertools as it
print('\n'.join(e for e, k in it.product(list_1, list_2) if k in e))