Binary Watch
我试图通过以下方法获得所有有效集。不过,我的all_comb
仍然包含[8, 4, 2, 1, 0.32, 0.16, 0.08, 0.04, 0.02, 0.01]
似乎我的检查功能只删除包含的部分列表
[8,4]
和[0.32, 0.16, 0.08, 0.04]
我已经坚持了一段时间。任何帮助将不胜感激。
`
upperLst = [8, 4, 2, 1]
lowerLst = [0.32, 0.16, 0.08, 0.04, 0.02, 0.01]
lst = upperLst + lowerLst
`
`def all_com(lst, num):
new_lst = []
for l in range(len(lst) + 1):
for subset in itertools.combinations(lst, l):
new_lst.append(list(subset))
return new_lst
def remove(lst):
"""Check if the lst is the valid combinations"""
upper = all(x in lst for x in [4, 8])
lower = all(x in lst for x in [0.32, 0.16, 0.08, 0.04])
return upper or lower or False
def check(lst):
"""check all the combinations are valid"""
for l in lst:
print("not removed lst", l)
if remove(l):
print('removed list: ', l)
lst.remove(l)
`
答案 0 :(得分:0)
如果在修改列表时循环遍历列表,则会破坏迭代的顺序。我在解释器上运行了以下示例:
list = range(10)
for val in list:
print val
list.remove(val)
输出为0 2 4 6 8,而不是0,1,2,3,4,5,6,7,8。
您可以通过将有效组合附加到列表然后返回该列表来解决此问题,这样就不会修改原始列表。