检查Python列表中是否有元素为字符串类型

3 投票
2 回答
1204 浏览
提问于 2025-04-18 15:03

我想在一个混合类型的列表中,如果里面有字符串类型的元素,就抛出一个 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

对字符串进行筛选也可以:

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

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

如果筛选后的列表是空的,说明原来的列表里没有字符串。

7

你可以使用any和一个生成器表达式

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字符串。

撰写回答