如何在Python中获取包含/match/exist数组之间的字符串?
我正在尝试获取这两个数组之间匹配的任何字符串,但不幸的是没有成功如何在Python中获取包含/match/exist数组之间的字符串?,python,Python,我正在尝试获取这两个数组之间匹配的任何字符串,但不幸的是没有成功 arr1 = ['crepas','aevig','rolex'] arr2 = ['fs', ':', 'rolex', 'datejust', '41', '126300', 'silver', 'dial', 'jubilee', '-', '2018', 'warranty', 'fs', ':', 'rolex', 'datejust', '41', '126300', 'silver', 'dial', 'jubile
arr1 = ['crepas','aevig','rolex']
arr2 = ['fs', ':', 'rolex', 'datejust', '41', '126300', 'silver', 'dial', 'jubilee', '-', '2018', 'warranty', 'fs', ':', 'rolex', 'datejust', '41', '126300', 'silver', 'dial', 'jubilee', '-', '2018', 'warranty']
res = [arr1.index(i) for i in arr2]
print(res)
我收到了这个错误信息
ValueError: 'fs' is not in list
应该是这样的
rolex
您只需检查
arr1
中的元素是否也在arr2中,请尝试以下操作:
res = [x for x in arr1 if x in arr2]
在这里使用index()
不是一个好主意,因为:
集合
可能会更有效,正如其他答案所指出的:
res = set(arr1).intersection(arr2)
我会在这里使用一个集合,因为您需要为多个事件输出一个值:
res = set(arr1).intersection(arr2)
注意:使用C语言进行内部实现时,速度会更快。请尝试:
arr3=列表(集合(arr1).交叉点(集合(arr2)))
打印(arr3)
返回:
['rolex']
如果您不想进行列表理解,您可以使用集合
进行如下操作:
arr1=['crepas'、'aevig'、'rolex']
arr2=['fs'、':'、'rolex'、'datejust'、'41'、'126300'、'SIVER'、'dial'、'jubilee'、'-'、'2018'、'保修'、'fs'、':'、'rolex'、'datejust'、'41'、'126300'、'SIVER'、'dial'、'jubilee'、'2018'、'保修']
res=集合(arr1)。交叉点(集合(arr2))
打印(res)
>>>{'rolex'}
是否只需要返回一个时间主义理解,这可能是最好的方法。。。。过滤器也可以使用,但可读性较差IMHO-过滤器(lambda x:True如果arr2中的x,则为False,则为arr1)如果您只希望res中的唯一元素保持顺序,则可以使用dict comprehensionres={i:arr2中的i如果arr1中的i为无;output=res.keys()
@Tooblippe,set
更快,可能是最好的方法,这是在C中使用内部实现。@Ch3steR为什么要使用dict,当一个集合做得更好时?@scarLópez但set是一个无序的集合。我是说,如果OP需要保留顺序,并且只需要唯一的值,那么dict
更好。由于dict
保留了添加键的顺序。set
是消除重复的最快方法。但这套是一个无序的收藏。如果OP需要保留顺序,并且只需要唯一的值,那么dict
更好。Asdict
保留添加键的顺序。