检查数字是否有任何重复元素

Checking if a number has any repeated elements

我一直致力于将整数拆分成它们所组成的数字,然后检查列表中是否有重复的数字。然而代码似乎总是说没有重复的数字,即使有。

我的代码:

def repeatCheck(myList, repeatedNumber):
    seen = set()
    for number in myList:
        if number in seen:
            repeatedNumber = True
        seen.add(number)
    return repeatedNumber


def numberWorks(number, finalNumber):    
    digits = [int(n) for n in str(number)]
    repeatedNumber = False
    repeatCheck(digits, repeatedNumber)
    if repeatedNumber == False:
        print(number, "succeeded repeatedNumber")
        found = True
    else:
        print(number, "failed repeatedNumber")
        pass
    return number


number = 1000000000

while found == False:
    numberWorks(number, finalNumber)
    number += 1
print(finalNumber)

输入数字1000000000,输出应该是1023456789

请让我知道任何可以解决它的方法,或者如果我提供的代码不够用。

谢谢。

如果您想检查数字中的重复数字,这里有一个快速的方法,returns 一个布尔值。

def noRepeatedDigits(number:int) -> bool:
  return all([str(number).count(i) == 1 for i in set(str(number))])

print(noRepeatedDigits(12344))
print(noRepeatedDigits(1234))
False #indicates it failed the check
True #indicates it passed the check

调用函数 repeatCheck() 时,不会传递对变量 repeatedNumber 的引用,因此对变量的任何更改都不会影响 repeatedNumber 的原始定义。因此,numberWorks() 中定义的 repeatedNumber 永远不会更新。

您可以做的是将 repeatCheckreturn 值分配给 repeatedNumber

repeatedNumber = False
repeatedNumber = repeatCheck(digits)

并在看到重复时将 repeatCheck 重写为 return TrueFalse

def repeatCheck(myList):
    seen = set()
    for number in myList:
        if number in seen:
            return True
        seen.add(number)
    return False

这样就避免了重用变量名的歧义repeatedNumber

我会简单地删除所有代码并执行此操作。

def repeatCheck(repeatedNumber):
    numbersdub = list(str(repeatedNumber))
    numbers = set(numbersdub)
    for num in numbers:
        numbersdub.remove(num)
    return set(numbersdub)


print(repeatCheck(78788))

这会给你一套所有的 dubbels。

另一种单线解决方案:

finalNumber = next(n for n in range(1000000000, 2000000000) if len(set(s := str(n))) == len(s))

print(finalNumber)
# 1023456789

解释: len(str(n))n的位数,而len(set(str(n)))是[=12的唯一位数=].只有当 n 没有重复数字时,这两个数量才相等。

整个东西都包裹在一个迭代器中,next( )returns迭代器的第一个值。