如何检查列表列表中的所有元素是否为字符串

时间:2015-07-14 17:05:33

标签: python string performance list

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

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

现在我想使用if命令,如下所示(伪代码!):

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

this question我学会了如何检查单个变量是否是字符串。因此,我可以这样做:

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

是这样做的方法还是有更快的解决方案,因为这需要一些时间来处理庞大的列表?

2 个答案:

答案 0 :(得分:3)

您的方法是正确的,any flatting list short cut seems slowest。一个fastest way may be use 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) ):
    ...

答案 1 :(得分:1)

对于任何级别的嵌套,您可能希望在一般情况下使用递归来解决此问题。例如:

def all_strings(thing):
    if isinstance(thing, str):
        return True
    elif isinstance(thing, list):
        for subthing in thing:
            if not all_strings(subthing):
                return False
        return True
    else:
        return False

>>> print all_strings('foo')
True
>>> print all_strings(['foo'])
True
>>> print all_strings(['foo',['foo']])
True
>>> print all_strings(['foo',[1, 'foo']])
False
>>>