使用list.remove()方法未正确删除列表

时间:2017-09-14 03:41:31

标签: python python-3.x

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)

`

1 个答案:

答案 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。

您可以通过将有效组合附加到列表然后返回该列表来解决此问题,这样就不会修改原始列表。