我有一个问题,我需要找到unique numbers
的数量。数字中没有数字repeated
。
如11, 1123, 41124
wont qualify
之类的数字。
数字应为1234, 12, or 987
,例如would qualify
。
我的代码运行正常。但是当范围超过10 ^ 6时。代码需要大量时间来执行。我怎样才能优化它。
for i in xrange(10000000):# pow(10, n) 10, 100, 10000,...
j = str(i)
if j != j[::-1]:
for k in range(len(j)):
if j.count(j[k]) == 1:
if k == len(j)-1:
count += 1
#print j
else:
break
if len(j) == 1:
count += 1
print count
答案 0 :(得分:3)
你可能以最低效的方式解决这个问题,而且数字越长,所需的时间就越长。您的代码看起来应该更像这样:
for i in xrange(10000000):
j = str(i)
if len(set(j)) == len(j):
count += 1
# print j
print count
这利用了Python集不能包含重复项的事实(删除了重复项)。因此,如果数字中数字集的长度与原始数字字符串的长度相同,则我们知道没有数字重复。
您甚至可以将其写在一行:
print sum(len(set(j)) == len(j) for j in (str(i) for i in xrange(10000000)))
其他人建议使用collections.counter
,如果您想知道哪些数字是重复的,这是有用的。