检查python列表是否有任何元素是字符串类型

Ans*_*shu 2 python exception typechecking

我试图在TypeError给出一个混合类型的列表时,如果一个列表包含一个字符串数据类型的元素.我能够使用下面的代码执行此操作,但我想知道是否有更好的方法来实现相同的结果.

numbers = [1, "two", 3, 4, 5]
myStrList = [x for x in numbers if isinstance(x, str)]
if len(myStrList) != 0:
    raise TypeError
else:
    #do something
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 7

您可以使用any生成器表达式:

numbers = [1, "two", 3, 4, 5]
if any(isinstance(x, str) for x in numbers):
    raise TypeError
else:
    #do something
Run Code Online (Sandbox Code Playgroud)

除了代码较少这一事实外,该解决方案实际上比您当前的解决方案更有效.这是因为,它不会构建不必要的列表,而是懒惰地计算结果,并且只检查所需数量的项目.


此外,如果您使用的是Python 2.x,那么测试实例basestring而不是仅仅是更好str.这将允许您还捕获unicode列表中的任何字符串.