如何检查特定数字是否为整数

问题描述 投票:0回答:6

例如,我想检查数字“2”是否在 4059304593 中。 我的目标是检查 1-9 中是否有任何数字不在我的整数中。这是我尝试过的:

for i in xrange(10):
    for j in xrange(100):
        num = str(i^j)
        one_count = 0
        two_count = 0
        for k in xrange(len(num)):
            if num[k] == 1:
                one_count += 1
            if num[k] == 2:
                two_count += 1                    

然后我的“计数”将一直下降到 nine_count,如果任何计数为 0,则该数字不在“num”中。从我在这些网站上读到的内容来看,我的脚本效率很低 - 有人能指出更好的方法吗?

python
6个回答
9
投票

这个“数字”的东西需要一种字符串方法,而不是数字方法(让我想起一些Project Euler谜题)。

我会先用您号码的数字创建一个

set
(同时删除重复项)

s = set(str(4059304593))

然后检查数字:

print('2' in s)

(请注意,

in
对于
set
来说是高性能的)

然后,检查

s
是否包含所有
013456789
数字:

print(s.issuperset("013456789"))

(如果必须多次执行此操作,可能值得使用字符串创建

set
issuperset
会工作得更快)


2
投票

您可以将号码转换为字符串,然后转换为集合以获得唯一的数字。

您只需迭代 0-9 中的数字即可找到原始数字中不存在的数字:

>>> set(map(int,str(4059304593)))
set([0, 9, 3, 4, 5])
>>> digits = _
>>> [i for i in range(10) if i not in digits]
[1, 2, 6, 7, 8]

1
投票
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
j = 0
nL = [0, 0, 0, 0, 0, 0, 0, 0, 0]
n = 1004 #number
while n:
    i = n%10
    nL[i] = 1
    n //= 10

nL = [1, 1, 0, 0, 1, 0, 0, 0, 0, 0]

说明: 如果

nL[i]
为 1,则第 i 位数字在
n


1
投票

因为您只想找出哪些数字不在您的号码中:

def not_in_number(n):
    return {*range(10)} - {*map(int, {*str(n)})}

用途:

>>> not_in_number(4059304593)
{1, 2, 6, 7, 8}

这将获取数字集 (

{*range(10)}
) 并从中减去您的号码的数字集 (
{*map(int, {*str(n)})}
),这是通过将数字字符集映射到整数而创建的。如果您发现
{*...}
表示法
令人困惑,您可以随时使用
set(...)
来代替,这也适用于 Python 2.7+:

def not_in_number(n):
    return set(range(10)) - set(map(int, set(str(n))))

1
投票

另一种方法是将

-
与集合一起使用:

set('0123456789') - set(str(4059304593))

结果是整数之外的所有数字:

{'2', '7', '1', '6', '8'}


0
投票
number = 4059304593
digit = 2
def hasDigit(number, digit):
    while number > 0:
        d = number % 10
        if d == digit:
            return True
        number = number // 10
    return False


© www.soinside.com 2019 - 2024. All rights reserved.