"½⅓¼⅕⅙⅐⅛⅑⅒⅔¾⅖⅗⅘⅚⅜⅝⅞⅟↉" VULGAR FRACTION
"৴৵৶৷৸৹" BENGALI CURRENCY NUMERATOR
"௰௱௲" TAMIL NUMBER TEN, ONE HUNDRED, ONE THOUSAND
"౸౹౺౻౼౽౾" TELUGU FRACTION DIGIT
"൰൱൲൳൴൵" MALAYALAM NUMBER, MALAYALAM FRACTION
"༳༪༫༬༭༮༯༰༱༲" TIBETAN DIGIT HALF ZERO~NINE
"፲፳፴፵፶፷፸፹፺፻፼" ETHIOPIC NUMBER TEN~NINETY, HUNDRED, TEN THOUSAND
"៰៱៲៳៴៵៶៷៸៹" KHMER SYMBOL LEK ATTAK
"ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯ" ROMAN NUMERAL
"ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿ" SMALL ROMAN NUMERAL
"ↀↁↂↅↆ" ROMAN NUMERAL
"⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿" CIRCLED NUMBER TEN~FIFTY
"㉈㉉㉊㉋㉌㉍㉎㉏" CIRCLED NUMBER TEN~EIGHTY ON BLACK SQUARE
"⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇" PARENTHESIZED NUMBER TEN~TWENTY
"⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛" NUMBER TEN~TWENTY FULL STOP
"⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴" NEGATIVE CIRCLED NUMBER ELEVEN
"⓾➉❿➓" various styles of CIRCLED NUMBER TEN
"🄌" DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
"〇" IDEOGRAPHIC NUMBER ZERO
"〡〢〣〤〥〦〧〨〩〸〹〺" HANGZHOU NUMERAL ONE~TEN, TWENTY, THIRTY
"㆒㆓㆔㆕" IDEOGRAPHIC ANNOTATION ONE~FOUR MARK
"㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩" PARENTHESIZED IDEOGRAPH ONE~TEN
"㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉" CIRCLED IDEOGRAPH ONE~TEN
"一二三四五六七八九十壹貳參肆伍陸柒捌玖拾零百千萬億兆弐貮贰㒃㭍漆什㐅陌阡佰仟万亿幺兩㠪亖卄卅卌廾廿" CJK UNIFIED IDEOGRAPH
"參拾兩零六陸什" CJK COMPATIBILITY IDEOGRAPH
"𐄇𐄈𐄉𐄊𐄋𐄌𐄍𐄎𐄏𐄐𐄑𐄒𐄓𐄔𐄕𐄖𐄗𐄘" AEGEAN NUMBER ONE~NINE, TEN~NINETY
"𐄙𐄚𐄛𐄜𐄝𐄞𐄟𐄠𐄡𐄢𐄣𐄤𐄥𐄦𐄧𐄨𐄩𐄪" AEGEAN NUMBER ONE~NINE HUNDRED, ONE~NINE THOUSAND
"𐄬𐄭𐄮𐄯𐄰𐄱𐄲𐄳" AEGEAN NUMBER TEN~NINETY THOUSAND
"𐅀𐅁𐅂𐅃𐅆𐅇𐅈𐅉𐅊𐅋𐅌𐅍𐅎𐅏𐅐𐅑𐅒𐅓𐅔𐅕𐅖𐅗𐅘𐅙𐅚𐅛𐅜𐅝𐅞𐅟𐅠𐅡𐅢𐅣𐅤𐅥𐅦𐅧𐅨𐅩𐅪𐅫𐅬𐅭𐅮𐅯𐅰𐅱𐅲𐅳𐅴" GREEK ACROPHONIC ATTIC
"𝍠𝍡𝍢𝍣𝍤𝍥𝍦𝍧𝍨" COUNTING ROD UNIT DIGIT ONE~NINE
"𝍩𝍪𝍫𝍬𝍭𝍮𝍯𝍰𝍱" COUNTING ROD TENS DIGIT ONE~NINE
import sys
import unicodedata
from collections import defaultdict
d = defaultdict(list)
for i in range(sys.maxunicode + 1):
s = chr(i)
t = s.isnumeric(), s.isdecimal(), s.isdigit()
if len(set(t)) == 2:
try:
name = unicodedata.name(s)
except ValueError:
name = f'codepoint{i}'
print(s, name)
d[t].append(s)
are False,False,False isdecimal()在任何语言中都只有0到9,但是如果没有负号,isdigit()在任何语言中都只有0到9,而且是在“的幂”位置。(幂中的十进制数,例如:2的5次幂)。isnumeric()的范围更广。它还将在任何位置包括多于0到9,但它也将在任何语言中具有数十、数百、数千,例如。roman 10是X,它是一个有效的isnumeric()。但这三个都是假的:负数,例如:-10和浮点数,例如:10.1
4条答案
按热度按时间qnakjoqk1#
isdecimal()
isdigit()
isnumeric()
。也就是说,如果一个字符串是decimal
,那么它也将是digit
和numeric
。因此,给定一个字符串
s
,用这三种方法测试它,只会有4种结果。1.字符
isdecimal()==True
的一些示例(thus
isdigit()==True
和isnumeric()==True
)2.字符
isdecimal()==False
但isdigit()==True
的一些示例(thus
isnumeric()==True
)3.字符
isdecimal()==False
和isdigit()==False
但isnumeric()==True
的一些示例yzxexxkh2#
主要是关于unicode分类的。下面是一些例子来说明差异:
具体的行为在这里的官方文档中。
脚本来查找所有这些:
x7rlezfr3#
Python文档指出了这三种方法之间的区别。
str.isdigit
如果字符串中的所有字符都是数字并且至少有一个字符,则返回true,否则返回false。数字包括十进制字符和需要特殊处理的数字,例如兼容性上标数字。这涵盖了不能用于形成基数为10的数字的数字,如Kharosthi数。形式上,数字是具有属性值Numeric_Type=Digit或Numeric_Type=Decimal的字符。
str.isnumeric
如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回true,否则返回false。数字字符包括数字字符,以及所有具有Unicode数值属性的字符,例如U+2155,VULGAR分数五分之一。形式上,数字字符是指属性值Numeric_Type=Digit、Numeric_Type=Decimal或Numeric_Type=Numeric的字符。
str.isdecimal
如果字符串中的所有字符都是十进制字符并且至少有一个字符,则返回true,否则返回false。**十进制字符是那些可以用来构成以10为基数的数字的字符,例如U+0660,阿拉伯-印度数字零。形式上,十进制字符是Unicode通用类别“Nd”**中的字符。
正如@Wim所说,这三种方法之间的主要区别在于它们处理特定unicode字符的方式。
r8xiu3jd4#
负数
a = "-10"
对于这三个都是假的are False,False,False isdecimal()在任何语言中都只有0到9,但是如果没有负号,isdigit()在任何语言中都只有0到9,而且是在“的幂”位置。(幂中的十进制数,例如:2的5次幂)。isnumeric()的范围更广。它还将在任何位置包括多于0到9,但它也将在任何语言中具有数十、数百、数千,例如。roman 10是X,它是一个有效的isnumeric()。但这三个都是假的:负数,例如:-10和浮点数,例如:10.1