有没有快速的方法来验证列表是否采用这种格式:
[a,b,c,...]
or
[[a,b,c...],[x,e,w,...],...]
但不是
[[[a],[b],[c]...],[[x],[e],[w],...],...]
或任何类似的
[[a,b,[e],f...],[x,e,w,...],...]
基本上是单个元素的列表,或包含单个元素的列表列表,但不是列表列表或更多嵌套...
我尝试用以下内容检查第二种情况:
all(isinstance(elem, list) for elem in v)
但这不符合我的情况
答案 0 :(得分:2)
将not any()
和all()
与or
:
flat = lambda l: not any(isinstance(e, list) for e in l)
if flat(v) or all(isinstance(e, list) and flat(e) for e in v):
如果v
中的元素的 none 是列表或者所有都是平面列表,则此短路和整体都是正确的。
演示:
>>> def flat_or_singular(v):
... flat = lambda l: not any(isinstance(e, list) for e in l)
... return flat(v) or all(isinstance(e, list) and flat(e) for e in v)
...
>>> tests = [
... ['a', 'b', 'c'],
... [['a' ,'b', 'c'], ['x', 'e', 'w']],
... [[['a'], ['b'], ['c']], [['x'], ['e'], ['w']]],
... [['a', 'b', ['e'], 'f'], ['x', 'e', 'w']],
... ]
>>> for test in tests:
... print('{}: {}'.format(flat_or_singular(test), test))
...
True: ['a', 'b', 'c']
True: [['a', 'b', 'c'], ['x', 'e', 'w']]
False: [[['a'], ['b'], ['c']], [['x'], ['e'], ['w']]]
False: [['a', 'b', ['e'], 'f'], ['x', 'e', 'w']]