我最近阅读的不是一个很好的做法,以执行以下操作:
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?我虽然关于使用reversed
和enumerate
,但后来我不知道如何在x
之前停止第二个循环到元素。
或者我应该采取不同的方式吗?
更新
我通过将集合列表放入一组元组来解决问题,然后我应用了
return [list(s) for s in h if sum(1 for o in h if set(s) <= set(o)) <= 1]
答案 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