嵌套循环遍历集

时间:2016-01-05 19:53:13

标签: python python-2.7 nested-loops

我最近阅读的不是一个很好的做法,以执行以下操作:

for i in xrange(len(string-or-list)):
    #do something with string-or-list[i]

我明白了。但是当谈到嵌套循环时,我不知道。

考虑集合h的列表。我想消除所有那些是其他集子集的集合。这就是我所做的:

for x in xrange(len(h)-1,-1,-1):
    for y in xrange(x):
        if h[x] <= h[y]: h[x] = set()
        elif h[x] > h[y]: h[y], h[x] = h[x], set()
return filter(None, h)

我能做些什么才能让它变得更加pythonic?我虽然关于使用reversedenumerate,但后来我不知道如何在x之前停止第二个循环到元素。 或者我应该采取不同的方式吗?

更新

我通过将集合列表放入一组元组来解决问题,然后我应用了

    return [list(s) for s in h if sum(1 for o in h if set(s) <= set(o)) <= 1]

2 个答案:

答案 0 :(得分:1)

最pythonic的事情是用你想要的集合组成一个新的列表。要删除重复项,我们需要一个辅助函数..

  MatchingNamingConvention namingConvention = new MatchingNamingConvention();

  ServerConfig serverConfig = ...
  serverConfig.setNamingConvention(namingConvention);

然后我们可以做我们想要的事情

def uniq(seq):
    memo = []
    for i in seq:
        if i not in memo:
            memo.append(i)
            yield i

答案 1 :(得分:1)

idea from Chad S.是好的和pythonic,但是阅读你的初始代码看起来你正在寻找子集(而不是严格的子集)。

这是一种解释单词子集通常含义的方法:

while True:
    for s in h:
        if sum(1 for o in h if s <= o) > 1:
            h.remove(s)
            break
    else:
        # no subsets were found - we're done
        break