How to check if a specific digit is in an integer

前端 未结 5 1040
我在风中等你
我在风中等你 2020-12-11 21:58

I want to check if, for example, the digit \'2\' is in 4059304593. My aim is to then check if there are any of the digits 1-9 not in my integer. This is what I have tried:

相关标签:
5条回答
  • 2020-12-11 22:17

    You could convert your number to a string, then to a set to get the unique digits.

    You just have to iterate over digits in 0-9 to find the ones not present in your original number :

    >>> 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]
    
    0 讨论(0)
  • 2020-12-11 22:17

    Another way is using - with sets:

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

    Result are all digits that aren't in your integer:

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

    0 讨论(0)
  • 2020-12-11 22:21
    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
    

    OUT

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

    Explanation: if nL[i] is 1, then the i-th digit is in n

    0 讨论(0)
  • 2020-12-11 22:22

    Since you just want to find out which digits aren't in your number:

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

    Usage:

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

    This takes the set of digits ({*range(10)}) and substracts from it the set of digits of your number ({*map(int, {*str(n)})}), created by mapping the set of digit characters to integers. If you find the {*...} notation confusing, you can always use set(...) instead, which will also work for Python 2.7+:

    def not_in_number(n):
        return set(range(10)) - set(map(int, set(str(n))))
    
    0 讨论(0)
  • 2020-12-11 22:36

    This "digit" thing calls for a string approach, not a numeric one (reminds me of some Project Euler puzzles).

    I'd create a set out of the digits of your number first (removing duplicates at the same time)

    s = set(str(4059304593))
    

    then to check for a digit:

    print('2' in s)
    

    (note that in for a set is performant)

    then, to check whether s contains all the 013456789 digits:

    print(s.issuperset("013456789"))
    

    (if this must be done multiple times, it may be worth to create a set with the string, issuperset will work faster)

    0 讨论(0)
提交回复
热议问题