优化python for循环

时间:2016-06-15 16:46:04

标签: python for-loop optimization

我有一个问题,我需要找到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

1 个答案:

答案 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,如果您想知道哪些数字是重复的,这是有用的。