如何检查一个列表的所有元素是否都是字符串?

31 浏览
0 Comments

如何检查一个列表的所有元素是否都是字符串?

假设我有一个像这样的字符串列表列表:

l=[['a','kl_hg', 'FOO'],['b', 'kl_c', 'po']]

现在我想按照以下方式使用if命令(伪代码):

if allElementsOf(l).isString():
#do something

从这个问题中我学到了如何检查单个变量是否为字符串。对于单个列表,我可以做到这一点:

dummyL = ['a','kl_hg', 'FOO']
if all(isinstance(s, basestring) for s in dummyL):
#do something

对于我的实际列表l,我可以这样做:

if all(isinstance(el, basestring) for sl in l for el in sl):
#do something

这是正确的方法,还是有更快的解决方案,因为针对大量列表的处理需要一些时间?

admin 更改状态以发布 2023年5月23日
0
0 Comments

很奇怪,没有人告诉过任何人内置函数:

seq = [['a','kl_hg', 'FOO'], ['b', 'kl_c', 'po', 13]]
def all_string(_iterable):    
    return not any([not isinstance(n, basestring) for i in _iterable 
                        for n in i])
all_string(seq) # returns False

使用any()函数的优点是它不会评估整个序列,它在找到第一个True值时返回——与all()相反。

0
0 Comments

你的方法是正确的,任何将列表平坦化的快捷方式似乎都很慢。最快的方法可能是使用itertools:

import itertools
l=[['a','kl_hg', 'FOO'],['b', 'kl_c', 'po']]
if all( isinstance(x, basestring) for x in  itertools.chain.from_iterable(l) ):
    ...

0