如何检查嵌套列表是否仅包含空字符串

Lou*_*vre 3 python nested-lists python-2.7

在 pyqt 中,我有一个用户可以编辑的 qtableview。如果用户对表进行了更改,则在用户完成后将复制该表。如果未进行任何更改,则跳过该表。该表充满了空字符串,即:

table = [["","",""],["","",""]]
Run Code Online (Sandbox Code Playgroud)

我想检查该表是否仅包含"",如果包含,则忽略它。如果它没有,即包含 a "1",一些代码会在列表中运行。现在我有一个工作代码,但它不是很 Pythonic,我想知道如何改进它。我的代码如下:

tabell1 = [["","",""],["","",""]]
meh = 0
for item in self.tabell1:
    for item1 in item:
        if item1 == "":
            pass
        else:
            meh = 1
if meh == 1:
    do the thing
Run Code Online (Sandbox Code Playgroud)

MSe*_*ert 5

要检查任何子列表中的任何元素是否满足您可以使用的条件any和嵌套的生成器表达式:

tabell1 = [["","",""],["","",""]]
if any(item for sublist in tabell1 for item in sublist):
    # do the thing
Run Code Online (Sandbox Code Playgroud)

这还有一个优点,它一旦找到一个非空字符串就停止!您的方法将继续搜索,直到检查所有子列表中的所有项目。

考虑空字符串,并且考虑False包含至少一项的每个字符串True。但是,您也可以明确地与空字符串进行比较:

tabell1 = [["","",""],["","",""]]
if any(item != "" for sublist in tabell1 for item in sublist):
    # do the thing
Run Code Online (Sandbox Code Playgroud)