Reputation: 13748
In the following code;
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
The digits set contains 3 elements. I want a set difference of them, however, remaining_digits
always have all digits. What am I doing wrong here?
Here is a sample from output I am getting;
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])
Upvotes: 1
Views: 4518
Reputation: 400304
all_digits
is a set of the ten integers 0
through 9
, whereas digits
is a set of 1-character strings like "0"
. Since the types are different, the set difference doesn't work as expected.
To make it work like you want, either use all integers or use all strings, e.g.:
all_digits = set(map(str, range(10)))
Upvotes: 7