2012-08-27 40 views
1

在下面的代码中;Python集合差异不起作用

all_digits = set(range(10)) 
print all_digits 
for i in range(102,167): 
    digits = set(k for k in (str(i))) 
    if len(digits) != 3: 
     continue 
    print "digits:", digits 
    remaining_digits = all_digits - digits 
    print "remaining:", remaining_digits 

数字集包含3个元素。我想要它们的差异,但是,remaining_digits总是有全部数字。我在这里做错了什么? 这里是我得到的输出样本;

set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '2']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '3']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '4']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '5']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '6']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '7']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
digits: set(['1', '0', '8']) 
remaining: set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

回答

6

all_digits是一组十个整数0通过9的,而digits是一组1字符字符串等"0"。由于类型不同,所设置的差异不能按预期工作。

要使其工作像你想,要么使用所有整数或使用的所有字符串,例如:

all_digits = set(map(str, range(10))) 
+0

啊,这样一个新手的错误。对不起,花时间。 – yasar