为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2022-05-24 17:18:38
我有一个不同类型的值列表,我想检查给定列表中是否存在子字符串,当找到时,我想取回它的索引。我试着用它做,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
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

只需根据字符串过滤您的列表,并仅针对通过过滤器的列表进行测试:


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):

  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()工作。


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信