Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索一个列表项与另一个列表项的子集_Python - Fatal编程技术网

Python 搜索一个列表项与另一个列表项的子集

Python 搜索一个列表项与另一个列表项的子集,python,Python,我很难找到在两个列表上搜索的最佳方法。我在这里浏览了许多建议使用any()或all()或regex()的帖子。。。我现在确实有它的功能,但我经常使用这种类型的搜索,我真的很想这样做的权利 SearchList = ['blah-1.2.3.tar.gz', 'blah-1.2.4.tar.gz', 'blah-1.2.5.tar.gz'] BaseList = ['blah-1.2.3', 'blah-1.2.4'] 我想在基本列表中搜索'1.2.3'、'1.2.4'和'1.2.5'中的搜索列

我很难找到在两个列表上搜索的最佳方法。我在这里浏览了许多建议使用
any()
all()
或regex()的帖子。。。我现在确实有它的功能,但我经常使用这种类型的搜索,我真的很想这样做的权利

SearchList = ['blah-1.2.3.tar.gz', 'blah-1.2.4.tar.gz', 'blah-1.2.5.tar.gz']
BaseList = ['blah-1.2.3', 'blah-1.2.4']
我想在基本列表中搜索
'1.2.3'
'1.2.4'
'1.2.5'
中的
搜索列表
项。我一直在使用
for
对象中的
for
循环,但我希望使用pythons列表理解/生成器表达式和
any()
或其他一些regex类型的解决方案。您可以:

[a for a in SearchList if a[:-7] in BaseList]
a[:-7]将在最后去掉.tar.gz,其余的是基本列表。它将返回SearchList中的元素列表,这些元素对应于BaseList中的元素。

您只需执行以下操作:

[a for a in SearchList if a[:-7] in BaseList]

a[:-7]将在最后去掉.tar.gz,其余的是基本列表。它将从SearchList返回与BaseList中的元素相对应的元素列表。

或者,利用接受元组参数的事实

t = tuple(BaseList)
[x for x in SearchList if x.startswith(t)]

或者,利用接受元组参数的事实

t = tuple(BaseList)
[x for x in SearchList if x.startswith(t)]


请发布您当前的解决方案。。。但听起来这更适合codereview.stackexchange.comI我不想要我的解决方案。。。我在征求任何不包含“for in a for”类型解决方案的建议。我建议使用正则表达式只获取可比较/待搜索字符串,并使用python的
set()
进行搜索/比较。感谢Joran提供有关codereview.stackexchange.com的提示。我刚刚签出并注册了它。。。看起来很酷。请发布您当前的解决方案。。。但听起来这更适合codereview.stackexchange.comI我不想要我的解决方案。。。我在征求任何不包含“for in a for”类型解决方案的建议。我建议使用正则表达式只获取可比较/待搜索字符串,并使用python的
set()
进行搜索/比较。感谢Joran提供有关codereview.stackexchange.com的提示。我刚刚签出并注册了它。。。看起来很酷,完美。有没有一种方法可以同时获取基本列表中不存在的内容?我使用了类似于[:-7]的东西,但有点复杂,因为我并不总是知道这些废话。这叫什么?在哪里可以找到关于它的信息?你是说Python的切片表示法?什么叫什么?[:-7]位?这就是使用切片表示法。括号表示索引,就像您用来查询列表或dict(本质上,字符串只是字符列表),冒号表示范围,数字是您想要的索引。负数从右开始计数,而不是从左开始计数。例如,对于
x=“abcdefg”
x[0]=“a”
x[0:2]=“ab”
x[2:==“cdefg”
x[:2]=“ab”
x[-3]=“e”
'x[-3:-1]=“efg”
x[-3:=“efg”
如果您的搜索列表中有许多不同类型的压缩文件,您可以执行.replace('.zip','').replace('.tar','').replace('.gz','')等操作。假设您的文件名中没有这些文件(如'myfile.zipfoobar.zip'),这会很奇怪。正则表达式会给你一张完美的支票。完美。有没有一种方法可以同时获取基本列表中不存在的内容?我使用了类似于[:-7]的东西,但有点复杂,因为我并不总是知道这些废话。这叫什么?在哪里可以找到关于它的信息?你是说Python的切片表示法?什么叫什么?[:-7]位?这就是使用切片表示法。括号表示索引,就像您用来查询列表或dict(本质上,字符串只是字符列表),冒号表示范围,数字是您想要的索引。负数从右开始计数,而不是从左开始计数。例如,对于
x=“abcdefg”
x[0]=“a”
x[0:2]=“ab”
x[2:==“cdefg”
x[:2]=“ab”
x[-3]=“e”
'x[-3:-1]=“efg”
x[-3:=“efg”
如果您的搜索列表中有许多不同类型的压缩文件,您可以执行.replace('.zip','').replace('.tar','').replace('.gz','')等操作。假设您的文件名中没有这些文件(如'myfile.zipfoobar.zip'),这会很奇怪。正则表达式将为您提供一个完美的检查。我尝试了[x for x in SearchList if not x.startswith(tuple(BaseList))],是的,效果也不错。它可能比使用切片表示法的要慢一点(只是…),我尝试了[x for x in SearchList if not x.startswith(tuple(BaseList))],是的,效果也不错。它可能比使用切片表示法的要慢一点(只是…)。