如何检查子字符串是否存在于 Python 的值列表中?

我有一个不同类型的值列表,我想检查给定列表中是否存在子字符串,当找到时,我想取回它的索引。


我试着用它做,any()但它给我一个错误说in <string>' requires string as left operand, not int。我假设,列表中的所有值都必须是字符串才能使用any(). 我可以用什么其他方式来实现这一目标?


这是我当前的代码:


list_val = [1,18.0, 'printer', 'EXTRACT (123)']

string_val = 'EXTRACT'

any(x in string_val for x in list_val)

我什至尝试将所有非字符串转换为字符串,然后想使用上述any()逻辑,但这给了我其他错误。我尝试了以下方法:


for i, val in enumerate(list_val):

    if not isinstance(val, str):

        list_val[i] = str(val)

这引发了我的错误:isinstance() arg 2 must be a type or tuple of types


四季花海
浏览 213回答 1
1回答

BIG阳

只需根据字符串过滤您的列表,并仅针对通过过滤器的列表进行测试:any(string_val in item for item in list_val if isinstance(item, str))演示:>>> list_val = [1,18.0, 'printer', 'EXTRACT (123)']>>> string_val = 'EXTRACT'>>> any(string_val in item for item in list_val if isinstance(item, str))True请注意,我使用string_val in item的是 ,而不是item in string_val; 您的示例列表清楚地表明您想查看是否有任何元素包含EXTRACT,而不是是否有元素是EXTRACT(例如'EXT','RACT'等)的子字符串。您的第二次尝试仅失败了,因为您似乎已为 name 分配了其他内容str,因为该isinstance()调用在其他方面是正确的:>>> isinstance("foo", str)True>>> str = "spam">>> isinstance("foo", str)Traceback (most recent call last):&nbsp; File "<stdin>", line 1, in <module>TypeError: isinstance() arg 2 must be a type or tuple of types>>> del str>>> isinstance("foo", str)True通过再次删除str绑定可以轻松解决问题,就像我在上面所做的那样无论如何您都必须这样做,因为使用过滤器时您会看到相同的any()异常isinstance()。然而,并不是说你需要改变list_val才能any()工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python