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

时间:2014-07-28 15:50:26

标签: 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

2 个答案:

答案 0 :(得分:7)

您可以使用anygenerator expression

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

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


此外,如果您使用的是Python 2.x,那么测试basestring的实例可能会更好,而不仅仅是str。这样您就可以捕获列表中的任何unicode字符串。

答案 1 :(得分:0)

过滤字符串列表也有效:

L=[0, 0, 1, 2, 'a', 3, 0, 0, 'l']

if filter(lambda item: isinstance(item, str), L) != []:
  raise TypeError
else:
  #do something

如果筛选列表为空,则原始列表中不会包含任何字符串。