Python方法重构

Python方法重构,python,python-2.7,Python,Python 2.7,我一直在努力解决这个问题,所以我会感谢你的帮助 我大学的任务是写这个方法: def removeRedundant(clauses, setOfSupport): newClauses = set() for clause in clauses: if not clause.isRedundant(clauses): newClauses.add(clause) newSOS = set() for clause in

我一直在努力解决这个问题,所以我会感谢你的帮助

我大学的任务是写这个方法:

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
以不同的方式避免这两个for循环。 我想知道是否有可能将这两个循环合并成一个循环,或者甚至有其他方法来替换它们


提前谢谢你

不,您无法删除所有循环,但可以将两个循环合并为一个:

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

@Vallentin什么?不。几乎可以肯定的是,作业希望您对代码进行折射,以便在
子句
支持集
上并行执行单次传递,因此很可能类似于
itertools。izip_longest
子句和
支持集
的长度相同吗?如果是,则任务相对容易完成。
isRedundant
做了什么?改进工作代码在我们的范围之内。在这里,它通常是不可重用的。