2017-03-28 115 views
1

在pyqt中,我有一個用戶可以編輯的qtableview。如果用戶對錶格進行更改,則表格將在用戶完成時被複制。如果沒有更改,則跳過該表。該表是充滿了空字符串即:如何檢查嵌套列表是否只包含空字符串

table = [["","",""],["","",""]] 

我要檢查,如果表格中只包含"",如果確實如此,忽略它。如果它不包含,即包含"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 

回答

1

要檢查是否在任何子列表中的任何元素滿足你可以使用any的條件和嵌套生成器表達式:

tabell1 = [["","",""],["","",""]] 
if any(item for sublist in tabell1 for item in sublist): 
    # do the thing 

這也有它只要找到一個不可─停止優勢空串!您的方法將繼續搜索,直到它檢查了所有子列表中的所有項目。

空串被認爲是False,每個包含至少一個項目的串被認爲是True。但是,您也可以明確地比較空字符串:

tabell1 = [["","",""],["","",""]] 
if any(item != "" for sublist in tabell1 for item in sublist): 
    # do the thing 
0

主要的事情,我看可能是更Python是使用空字符串被認爲是假的,像這樣的事實...

tabell1 = [["","",""],["","",""]] 
meh = 0 
for sublist in self.tabell1: 
    if any(sublist): # true if any element of sublist is not empty 
     meh = 1 
     break   # no need to keep checking, since we found something 
if meh == 1: 
    do the thing 
0

或者你可以通過將其轉換爲字符串,刪除,如果它是空的,只會出現在所有的字符,然後檢查是否是空的或無法避免通過列表循環:

tabell1 = [["","",""],["","",""]] 
if not str(tabell1).translate(None, "[]\"\', "): 
    #do the thing 

雖然這會我任何僅包含[],",'的實例的表將被認爲是空的。

相關問題