如何在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 comprehension
    res={i:arr2中的i如果arr1中的i为无;output=res.keys()
    @Tooblippe,
    set
    更快,可能是最好的方法,这是在C中使用内部实现。@Ch3steR为什么要使用dict,当一个集合做得更好时?@scarLópez但set是一个无序的集合。我是说,如果OP需要保留顺序,并且只需要唯一的值,那么
    dict
    更好。由于
    dict
    保留了添加键的顺序。
    set
    是消除重复的最快方法。但这套是一个无序的收藏。如果OP需要保留顺序,并且只需要唯一的值,那么
    dict
    更好。As
    dict
    保留添加键的顺序。