str.isdecimal() and str.isdigit() difference example
PythonPython 3.xPython Problem Overview
Reading python docs I have come to .isdecimal() and .isdigit() string functions and i'm not finding literature too clear on their usable distinction. Could someone supply me with code examples of where these two functions differentiate please.
Similar behaviour:
>>> str.isdecimal('1')
True
>>> str.isdigit('1')
True
>>> str.isdecimal('1.0')
False
>>> str.isdigit('1.0')
False
>>> str.isdecimal('1/2')
False
>>> str.isdigit('1/2')
False
Python Solutions
Solution 1 - Python
There are differences, but they're somewhat rare*. It mainly crops up with various unicode characters, such as 2
:
>>> c = '\u00B2'
>>> c.isdecimal()
False
>>> c.isdigit()
True
You can also go further down the careful-unicode-distinction rabbit hole with the isnumeric
method:
>>> c = '\u00BD' # ½
>>> c.isdecimal()
False
>>> c.isdigit()
False
>>> c.isnumeric()
True
*At least, I've never encountered production code that needs to distinguish between strings that contain different types of these exceptional situations, but surely use cases exist somewhere.
Solution 2 - Python
Lets see some examples:
> str.isdecimal() (Only Decimal Numbers)
Is 34 a decimal number? --> Yes
print("34".isdecimal()) #True
Is superscript 2 a decimal number? --> No
print("\u00B2")
print("\u00B2".isdecimal()) #False
> str.isdigit() (Decimals, Subscripts, Superscripts)
Is 34 a digit? --> Yes
print("34".isdigit()) #True
Is superscript 2 a digit? --> Yes
print("\u00B2")
print("\u00B2".isdigit()) #True
> str.isnumeric() (Decimals, Subscripts, Superscripts, Vulgar Fractions, Roman Numerals, Currency Numerators)
Is 34 a numeric number? --> Yes
print("34".isnumeric()) #True
Is superscript 2 a numeric number? --> Yes
print("\u00B2")
print("\u00B2".isnumeric()) #True
Is Vulgar Fraction one Quarter numeric number? -->Yes
print("\u00BC")
print("\u00BC".isnumeric()) #True
Solution 3 - Python
If you doubt, my advice - to code, to look a results, to draw conclusions.
##A code
In [115]: import itertools
...:
...: line = '-' * 37
...: print(line)
...: print("| № | isdigit | isdecimal | chr")
...: print(line)
...: for number in itertools.chain(range(1000), range(4969, 4978), range(8304, 11000)):
...: char = chr(number)
...: if (char.isdigit() or char.isdecimal()):
...: print('| {0:>6} | {1:^7} | {2:^9} | {3:3} '.format(
...: number,
...: '+' if char.isdigit() else '-',
...: '+' if char.isdecimal() else '-',
...: char
...: )
...: )
...:
##Look a results
-------------------------------------
| № | isdigit | isdecimal | chr
-------------------------------------
| 48 | + | + | 0
| 49 | + | + | 1
| 50 | + | + | 2
| 51 | + | + | 3
| 52 | + | + | 4
| 53 | + | + | 5
| 54 | + | + | 6
| 55 | + | + | 7
| 56 | + | + | 8
| 57 | + | + | 9
| 178 | + | - | ²
| 179 | + | - | ³
| 185 | + | - | ¹
| 4969 | + | - | ፩
| 4970 | + | - | ፪
| 4971 | + | - | ፫
| 4972 | + | - | ፬
| 4973 | + | - | ፭
| 4974 | + | - | ፮
| 4975 | + | - | ፯
| 4976 | + | - | ፰
| 4977 | + | - | ፱
| 8304 | + | - | ⁰
| 8308 | + | - | ⁴
| 8309 | + | - | ⁵
| 8310 | + | - | ⁶
| 8311 | + | - | ⁷
| 8312 | + | - | ⁸
| 8313 | + | - | ⁹
| 8320 | + | - | ₀
| 8321 | + | - | ₁
| 8322 | + | - | ₂
| 8323 | + | - | ₃
| 8324 | + | - | ₄
| 8325 | + | - | ₅
| 8326 | + | - | ₆
| 8327 | + | - | ₇
| 8328 | + | - | ₈
| 8329 | + | - | ₉
| 9312 | + | - | ①
| 9313 | + | - | ②
| 9314 | + | - | ③
| 9315 | + | - | ④
| 9316 | + | - | ⑤
| 9317 | + | - | ⑥
| 9318 | + | - | ⑦
| 9319 | + | - | ⑧
| 9320 | + | - | ⑨
| 9332 | + | - | ⑴
| 9333 | + | - | ⑵
| 9334 | + | - | ⑶
| 9335 | + | - | ⑷
| 9336 | + | - | ⑸
| 9337 | + | - | ⑹
| 9338 | + | - | ⑺
| 9339 | + | - | ⑻
| 9340 | + | - | ⑼
| 9352 | + | - | ⒈
| 9353 | + | - | ⒉
| 9354 | + | - | ⒊
| 9355 | + | - | ⒋
| 9356 | + | - | ⒌
| 9357 | + | - | ⒍
| 9358 | + | - | ⒎
| 9359 | + | - | ⒏
| 9360 | + | - | ⒐
| 9450 | + | - | ⓪
| 9461 | + | - | ⓵
| 9462 | + | - | ⓶
| 9463 | + | - | ⓷
| 9464 | + | - | ⓸
| 9465 | + | - | ⓹
| 9466 | + | - | ⓺
| 9467 | + | - | ⓻
| 9468 | + | - | ⓼
| 9469 | + | - | ⓽
| 9471 | + | - | ⓿
| 10102 | + | - | ❶
| 10103 | + | - | ❷
| 10104 | + | - | ❸
| 10105 | + | - | ❹
| 10106 | + | - | ❺
| 10107 | + | - | ❻
| 10108 | + | - | ❼
| 10109 | + | - | ❽
| 10110 | + | - | ❾
| 10112 | + | - | ➀
| 10113 | + | - | ➁
| 10114 | + | - | ➂
| 10115 | + | - | ➃
| 10116 | + | - | ➄
| 10117 | + | - | ➅
| 10118 | + | - | ➆
| 10119 | + | - | ➇
| 10120 | + | - | ➈
| 10122 | + | - | ➊
| 10123 | + | - | ➋
| 10124 | + | - | ➌
| 10125 | + | - | ➍
| 10126 | + | - | ➎
| 10127 | + | - | ➏
| 10128 | + | - | ➐
| 10129 | + | - | ➑
| 10130 | + | - | ➒
Draw a conclusions
As you can see, main difference between the function str.isdecimal() and str.isdigit() is that: the function str.isdecimal() return True only for numbers from 0 to 9, at the same time the function str.isdigit() return True for some other unicode-supported chars.
Solution 4 - Python
Completing the answer from PADYMKO, we can add the other function of interest and extend the code
Code
import itertools
line = '-' * 49
print(line)
print("| № | isdigit | isdecimal | isnumeric | chr |")
print(line)
for number in itertools.chain(range(1000), range(4969, 4978), range(8304, 11000)):
char = chr(number)
if (char.isdigit() or char.isdecimal() or char.isnumeric()):
print('| {0:>6} | {1:^7} | {2:^9} | {3:^9} | {4:3} |'.format(
number,
'+' if char.isdigit() else '-',
'+' if char.isdecimal() else '-',
'+' if char.isnumeric() else '-',
char
)
)
And the results
-------------------------------------------------
| № | isdigit | isdecimal | isnumeric | chr |
-------------------------------------------------
| 48 | + | + | + | 0 |
| 49 | + | + | + | 1 |
| 50 | + | + | + | 2 |
| 51 | + | + | + | 3 |
| 52 | + | + | + | 4 |
| 53 | + | + | + | 5 |
| 54 | + | + | + | 6 |
| 55 | + | + | + | 7 |
| 56 | + | + | + | 8 |
| 57 | + | + | + | 9 |
| 178 | + | - | + | ² |
| 179 | + | - | + | ³ |
| 185 | + | - | + | ¹ |
| 188 | - | - | + | ¼ |
| 189 | - | - | + | ½ |
| 190 | - | - | + | ¾ |
| 4969 | + | - | + | ፩ |
| 4970 | + | - | + | ፪ |
| 4971 | + | - | + | ፫ |
| 4972 | + | - | + | ፬ |
| 4973 | + | - | + | ፭ |
| 4974 | + | - | + | ፮ |
| 4975 | + | - | + | ፯ |
| 4976 | + | - | + | ፰ |
| 4977 | + | - | + | ፱ |
| 8304 | + | - | + | ⁰ |
| 8308 | + | - | + | ⁴ |
| 8309 | + | - | + | ⁵ |
| 8310 | + | - | + | ⁶ |
| 8311 | + | - | + | ⁷ |
| 8312 | + | - | + | ⁸ |
| 8313 | + | - | + | ⁹ |
| 8320 | + | - | + | ₀ |
| 8321 | + | - | + | ₁ |
| 8322 | + | - | + | ₂ |
| 8323 | + | - | + | ₃ |
| 8324 | + | - | + | ₄ |
| 8325 | + | - | + | ₅ |
| 8326 | + | - | + | ₆ |
| 8327 | + | - | + | ₇ |
| 8328 | + | - | + | ₈ |
| 8329 | + | - | + | ₉ |
| 8528 | - | - | + | ⅐ |
| 8529 | - | - | + | ⅑ |
| 8530 | - | - | + | ⅒ |
| 8531 | - | - | + | ⅓ |
| 8532 | - | - | + | ⅔ |
| 8533 | - | - | + | ⅕ |
| 8534 | - | - | + | ⅖ |
| 8535 | - | - | + | ⅗ |
| 8536 | - | - | + | ⅘ |
| 8537 | - | - | + | ⅙ |
| 8538 | - | - | + | ⅚ |
| 8539 | - | - | + | ⅛ |
| 8540 | - | - | + | ⅜ |
| 8541 | - | - | + | ⅝ |
| 8542 | - | - | + | ⅞ |
| 8543 | - | - | + | ⅟ |
| 8544 | - | - | + | Ⅰ |
| 8545 | - | - | + | Ⅱ |
| 8546 | - | - | + | Ⅲ |
| 8547 | - | - | + | Ⅳ |
| 8548 | - | - | + | Ⅴ |
| 8549 | - | - | + | Ⅵ |
| 8550 | - | - | + | Ⅶ |
| 8551 | - | - | + | Ⅷ |
| 8552 | - | - | + | Ⅸ |
| 8553 | - | - | + | Ⅹ |
| 8554 | - | - | + | Ⅺ |
| 8555 | - | - | + | Ⅻ |
| 8556 | - | - | + | Ⅼ |
| 8557 | - | - | + | Ⅽ |
| 8558 | - | - | + | Ⅾ |
| 8559 | - | - | + | Ⅿ |
| 8560 | - | - | + | ⅰ |
| 8561 | - | - | + | ⅱ |
| 8562 | - | - | + | ⅲ |
| 8563 | - | - | + | ⅳ |
| 8564 | - | - | + | ⅴ |
| 8565 | - | - | + | ⅵ |
| 8566 | - | - | + | ⅶ |
| 8567 | - | - | + | ⅷ |
| 8568 | - | - | + | ⅸ |
| 8569 | - | - | + | ⅹ |
| 8570 | - | - | + | ⅺ |
| 8571 | - | - | + | ⅻ |
| 8572 | - | - | + | ⅼ |
| 8573 | - | - | + | ⅽ |
| 8574 | - | - | + | ⅾ |
| 8575 | - | - | + | ⅿ |
| 8576 | - | - | + | ↀ |
| 8577 | - | - | + | ↁ |
| 8578 | - | - | + | ↂ |
| 8581 | - | - | + | ↅ |
| 8582 | - | - | + | ↆ |
| 8583 | - | - | + | ↇ |
| 8584 | - | - | + | ↈ |
| 8585 | - | - | + | ↉ |
| 9312 | + | - | + | ① |
| 9313 | + | - | + | ② |
| 9314 | + | - | + | ③ |
| 9315 | + | - | + | ④ |
| 9316 | + | - | + | ⑤ |
| 9317 | + | - | + | ⑥ |
| 9318 | + | - | + | ⑦ |
| 9319 | + | - | + | ⑧ |
| 9320 | + | - | + | ⑨ |
| 9321 | - | - | + | ⑩ |
| 9322 | - | - | + | ⑪ |
| 9323 | - | - | + | ⑫ |
| 9324 | - | - | + | ⑬ |
| 9325 | - | - | + | ⑭ |
| 9326 | - | - | + | ⑮ |
| 9327 | - | - | + | ⑯ |
| 9328 | - | - | + | ⑰ |
| 9329 | - | - | + | ⑱ |
| 9330 | - | - | + | ⑲ |
| 9331 | - | - | + | ⑳ |
| 9332 | + | - | + | ⑴ |
| 9333 | + | - | + | ⑵ |
| 9334 | + | - | + | ⑶ |
| 9335 | + | - | + | ⑷ |
| 9336 | + | - | + | ⑸ |
| 9337 | + | - | + | ⑹ |
| 9338 | + | - | + | ⑺ |
| 9339 | + | - | + | ⑻ |
| 9340 | + | - | + | ⑼ |
| 9341 | - | - | + | ⑽ |
| 9342 | - | - | + | ⑾ |
| 9343 | - | - | + | ⑿ |
| 9344 | - | - | + | ⒀ |
| 9345 | - | - | + | ⒁ |
| 9346 | - | - | + | ⒂ |
| 9347 | - | - | + | ⒃ |
| 9348 | - | - | + | ⒄ |
| 9349 | - | - | + | ⒅ |
| 9350 | - | - | + | ⒆ |
| 9351 | - | - | + | ⒇ |
| 9352 | + | - | + | ⒈ |
| 9353 | + | - | + | ⒉ |
| 9354 | + | - | + | ⒊ |
| 9355 | + | - | + | ⒋ |
| 9356 | + | - | + | ⒌ |
| 9357 | + | - | + | ⒍ |
| 9358 | + | - | + | ⒎ |
| 9359 | + | - | + | ⒏ |
| 9360 | + | - | + | ⒐ |
| 9361 | - | - | + | ⒑ |
| 9362 | - | - | + | ⒒ |
| 9363 | - | - | + | ⒓ |
| 9364 | - | - | + | ⒔ |
| 9365 | - | - | + | ⒕ |
| 9366 | - | - | + | ⒖ |
| 9367 | - | - | + | ⒗ |
| 9368 | - | - | + | ⒘ |
| 9369 | - | - | + | ⒙ |
| 9370 | - | - | + | ⒚ |
| 9371 | - | - | + | ⒛ |
| 9450 | + | - | + | ⓪ |
| 9451 | - | - | + | ⓫ |
| 9452 | - | - | + | ⓬ |
| 9453 | - | - | + | ⓭ |
| 9454 | - | - | + | ⓮ |
| 9455 | - | - | + | ⓯ |
| 9456 | - | - | + | ⓰ |
| 9457 | - | - | + | ⓱ |
| 9458 | - | - | + | ⓲ |
| 9459 | - | - | + | ⓳ |
| 9460 | - | - | + | ⓴ |
| 9461 | + | - | + | ⓵ |
| 9462 | + | - | + | ⓶ |
| 9463 | + | - | + | ⓷ |
| 9464 | + | - | + | ⓸ |
| 9465 | + | - | + | ⓹ |
| 9466 | + | - | + | ⓺ |
| 9467 | + | - | + | ⓻ |
| 9468 | + | - | + | ⓼ |
| 9469 | + | - | + | ⓽ |
| 9470 | - | - | + | ⓾ |
| 9471 | + | - | + | ⓿ |
| 10102 | + | - | + | ❶ |
| 10103 | + | - | + | ❷ |
| 10104 | + | - | + | ❸ |
| 10105 | + | - | + | ❹ |
| 10106 | + | - | + | ❺ |
| 10107 | + | - | + | ❻ |
| 10108 | + | - | + | ❼ |
| 10109 | + | - | + | ❽ |
| 10110 | + | - | + | ❾ |
| 10111 | - | - | + | ❿ |
| 10112 | + | - | + | ➀ |
| 10113 | + | - | + | ➁ |
| 10114 | + | - | + | ➂ |
| 10115 | + | - | + | ➃ |
| 10116 | + | - | + | ➄ |
| 10117 | + | - | + | ➅ |
| 10118 | + | - | + | ➆ |
| 10119 | + | - | + | ➇ |
| 10120 | + | - | + | ➈ |
| 10121 | - | - | + | ➉ |
| 10122 | + | - | + | ➊ |
| 10123 | + | - | + | ➋ |
| 10124 | + | - | + | ➌ |
| 10125 | + | - | + | ➍ |
| 10126 | + | - | + | ➎ |
| 10127 | + | - | + | ➏ |
| 10128 | + | - | + | ➐ |
| 10129 | + | - | + | ➑ |
| 10130 | + | - | + | ➒ |
| 10131 | - | - | + | ➓ |
PS: I am sorry for the wrong format.
Solution 5 - Python
examples of isdigit a = "123"
a.isdigit()
true
a = "1.234"
a.isdigit()
false
a ="2²"
a.isdigit()
b = "3₄"
b.isdigit()
The roman numerals, currency numerators and fractions (usually written using unicode) are considered numeric characters but not digits. The isdigit() returns False if the string contains these characters
Roman Numerals : Ⅰ, Ⅱ ,Ⅺ currency numerators : $,₹,€,£ fractions : ½,⅔,¼
c = "Ⅺ"
c.isdigit()
false
d = "₹"
d.isdigit()
false
e = "½"
e.isdigit()
false
some examples of isdecimal ()
a = "123"
a.isdecimal()
true b = "3₄"
b.isdecimal()
c = "Ⅺ"
c.isdecimal()
false d = "₹"
d.isdecimal()
false e = "½"
e.isdecimal()
false
The superscript and subscripts are considered digit characters but not decimals. If the string contains these characters (usually written using unicode), isdecimal() returns False. Similarly, roman numerals, currency numerators and fractions are considered numeric numbers (usually written using unicode) but not decimals. The isdecimal() also returns False in this case.
source link : https://www.programiz.com/python-programming/methods/string/isdecimal https://www.programiz.com/python-programming/methods/string/isdigit
if i am wrong then please correct me just a new learner