检查数字是否有任何重复元素
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
永远不会更新。
您可以做的是将 repeatCheck
的 return
值分配给 repeatedNumber
。
repeatedNumber = False
repeatedNumber = repeatCheck(digits)
并在看到重复时将 repeatCheck
重写为 return True
或 False
:
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迭代器的第一个值。
我一直致力于将整数拆分成它们所组成的数字,然后检查列表中是否有重复的数字。然而代码似乎总是说没有重复的数字,即使有。
我的代码:
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
永远不会更新。
您可以做的是将 repeatCheck
的 return
值分配给 repeatedNumber
。
repeatedNumber = False
repeatedNumber = repeatCheck(digits)
并在看到重复时将 repeatCheck
重写为 return True
或 False
:
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迭代器的第一个值。