Python列表中填充了重复项

时间:2013-08-25 13:35:29

标签: python list python-3.x duplicate-removal

这是代码。

x=0
result=[]
for n in range(1,5):
    x=x+n;
    for i in range(1,10):
        if x%i==0:
            result.append(i)       
            print(x,result)

这里我生成了三角形数字。我想找到每个三角形数的除数。但是当我执行代码时,我得到以下输出。

1 [1]
3 [1, 1]
3 [1, 1, 3]
6 [1, 1, 3, 1]
6 [1, 1, 3, 1, 2]
6 [1, 1, 3, 1, 2, 3]
6 [1, 1, 3, 1, 2, 3, 6]
10 [1, 1, 3, 1, 2, 3, 6, 1]
10 [1, 1, 3, 1, 2, 3, 6, 1, 2]
10 [1, 1, 3, 1, 2, 3, 6, 1, 2, 5]

同样的三角形数字也会重复几次。所以我需要一个输出看起来像

1 [1]
3 [1, 3]
6 [1, 2, 3, 6]
10 [1, 2, 5]

如何获得这样的输出?谢谢。

2 个答案:

答案 0 :(得分:3)

您将在循环内追加到同一个result列表。您应该在外部循环中创建一个新的result列表。并且您的print语句错误缩进。将它移到内循环之外。

您的代码应为:

x=0
for n in range(1,5):
    x=x+n;
    result = []
    for i in range(1,10):
        if x%i==0:
            result.append(i)       
    print(x,result)

<强>输出:

1 [1]
3 [1, 3]
6 [1, 2, 3, 6]
10 [1, 2, 5]

答案 1 :(得分:0)

要查找数字的除数,您可以使用此函数

def divisors(n):
    divisors=[]
    for i in range(1,int(n**0.5)+1):
        if n%i == 0:
            divisors.extend((i,n/i))
    return list(set(divisors))

如果你找到一个可以除数n的数字i,则n和n / i都成为除数。 唯一的问题是完美的方形数字,其根将被添加两次(如果我成为n的根,n / i和i相等并且两者都将被添加到列表中)。 它由set()函数解决。