2

用简洁的标题来解释我的要求有点困难,所以这里是解释。我有一个类列表,这些对象都包含它们自己的数据集。我遇到的问题是我尝试遍历这些对象并过滤掉列表中当前对象之前的对象之一中使用的数据。代码片段如下所示:

objs = [list-of-objects]
used = set([])
for obj in objs:
    used = used.union(obj.callSomeFunc(used))

该 callSomeFunc 成员返回一组与当前使用的集合不相交的数据。

这段代码有效,但我不太喜欢它,我不敢相信没有更好的方法来做到这一点。

4

3 回答 3

2

我唯一要改变的是使用set.update()而不是set.union()

objs = [list-of-objects]
used = set()
for obj in objs:
    used.update(obj.callSomeFunc(used))

可以使用reduce(),但我认为这会损害可读性。

编辑:这是使用的代码reduce()

used = reduce(lambda used, obj: used.union(obj.callSomeFunc(used)), objs, set())
于 2012-06-27T12:05:44.163 回答
1

如果我理解你的问题,那么我猜你正在寻找这样的东西:

objs=[1,19,4,3,1,3,5,1,5,6,7,8,9,18,8,6]
used=[]

for x in objs:
  if x not in used: #only choose that data that is not present in used
    used.append(x)
print(used)     

输出:

[1, 19, 4, 3, 5, 6, 7, 8, 9, 18]
于 2012-06-27T12:10:49.663 回答
1

您还可以递归地表达问题 - 这对某些人来说可能更具可读性。:-)

def filter_list(used, remaining):
    if len(remaining) == 0:
        return used
    obj = remaining[0]
    return filter_list(used.append(obj.someFunc(used)), remaining[1:])
于 2012-06-27T12:30:18.157 回答