首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:检查任意数量的嵌套列表,以总结是否为空

python:检查任意数量的嵌套列表,以总结是否为空
EN

Stack Overflow用户
提问于 2016-01-28 19:50:55
回答 3查看 235关注 0票数 0

所以基本上,我试图创建一个函数来检查一个列表,这个列表可能包含许多嵌套的列表,也可能不包含很多嵌套的列表,看看它们是否都是空的。

所以

empty([])将返回true,empty([['']])empty([[[]]])也将返回true

我试过了

代码语言:javascript
复制
def empty(seq):
     try:
         return all(map(empty, seq))
     except TypeError:
         return False

但是当我运行这个程序时,会遇到RuntimeError: maximum recursion depth exceeded错误。

有问题的案例字符串是这样的:["[u'3D Blu-ray Disc\\u2122 Player (BD-D7500)']"],我不知道为什么会导致这个问题

代码语言:javascript
复制
["[u'3D Blu-ray Disc\\u2122 Player (BD-D7500)']"]
maximum recursion depth exceeded in cmp
Traceback (most recent call last):
  File "./dashboard.py", line 583, in download
    return get_rows_from_db(str(job.id), job.url,taskid, options,trial)
  File "./dashboard.py", line 123, in get_rows_from_db
    print "B " + empty(col)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "./dashboard.py", line 52, in empty
    for item in seq)
  File "./dashboard.py", line 52, in <genexpr>
    for item in seq)
  File "/usr/lib/python2.7/abc.py", line 132, in __instancecheck__
    if subclass is not None and subclass in cls._abc_cache:
  File "/usr/lib/python2.7/_weakrefset.py", line 73, in __contains__
    return wr in self.data
RuntimeError: maximum recursion depth exceeded in cmp
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-28 20:08:52

此函数满足您提供的每个测试用例。

代码语言:javascript
复制
import collections


def empty(seq):
    if isinstance(seq, basestring):
        return seq == ''
    return all(empty(item)
               if isinstance(item, collections.Sequence)
               else False
               for item in seq)

assert empty([])
assert empty([['']])
assert empty([[[]]])
assert not empty([[[], 1]])
assert empty(u'')
assert not empty(u'1')
assert not empty(["[[u'3D Blu-ray Disc\\u2122 Player (BD-D7500)']"])
票数 1
EN

Stack Overflow用户

发布于 2016-01-28 19:55:59

代码语言:javascript
复制
def empty(L_or_I):
    if not L_or_I:
       return True
    if isinstance(L_or_I,(list,tuple)):
       return all(empty(x) for x in L_or_I)
    return False

我猜..。也许吧

票数 1
EN

Stack Overflow用户

发布于 2016-01-28 20:02:47

如果0的列表是“空”,Joran的回答肯定是正确的。

如果您只想检查可迭代性,我建议:

代码语言:javascript
复制
import collections
def empty(e):
    if not isinstance(e, collections.Iterable):
        return False
    if not e:
        return True
    return all(empty(x) for x in e)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35070722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档