yasar
yasar

Reputation: 13748

Python set difference not working

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

Answers (1)

Adam Rosenfield
Adam Rosenfield

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

Related Questions