1 回答
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()工作。
添加回答
举报