2017-04-09 44 views
-1

我一直在努力解決這個問題,所以我將不勝感激您的幫助!Python方法重構

我的大學的任務就是寫這個方法:

def removeRedundant(clauses, setOfSupport): 

    newClauses = set() 
    for clause in clauses: 
     if not clause.isRedundant(clauses): 
      newClauses.add(clause) 

    newSOS = set() 
    for clause in setOfSupport: 
     if not clause.isRedundant(setOfSupport): 
      newSOS.add(clause) 

    return newClauses, newSOS 

中避免這些2循環的方式不同。 我想知道是否有可能合併這兩個循環在一個或甚至有一些其他方式來取代它們?

預先感謝您!

+0

@Vallentin什麼?不,幾乎可以肯定的是,這個任務需要你對摺疊代碼進行摺疊處理,以在'clauses'和'setOfSupport'上並行執行一次遍歷,所以可能類似'itertools.izip_longest' –

+0

'clauses'和'setOfSupport'長度相同?如果是的話,這項任務相對容易完成。 – ForceBru

+0

'isRedundant'做什麼? –

回答

0

不,你將無法擺脫所有的循環,但它可以將兩個環路合併爲一個:

from itertools import izip_longest 

def removeRedundant(clauses, setOfSupport): 
    newClauses, newSOS = set(), set() 

    for clause, support in izip_longest(clauses, setOfSupport, fillvalue=None): 
     if (clause is not None) and (not clause.isRedundant(clauses)): 
      newClauses.add(clause) 
     if (support is not None) and (not support.isRedundant(setOfSupport)): 
      newSOS.add(support) 

    return newClauses, newSOS