有没有一种好方法可以计算 python 中整数和非整数的数量?[关闭]

Is there a good way to count the number of integers and non-integers in python? [closed]

提问人:gamertamer 提问时间:11/6/2023 更新时间:11/6/2023 访问量:74

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

14天前关闭。

我目前正在尝试在 python 中想出一些代码,您可以在其中输入一个句子作为字符串,它会告诉您有多少是整数,有多少不是。

例如,如果我输入句子“2014 年我们用 3 个完整的馅饼庆祝了 3.14”,我将需要两个单独的输出来告诉我有 2 个整数和一个非整数

坦率地说,在计算输入中有多少个数字后,我被困住了

def integer_count(entry):
  num_integers = len(re.findall((r'\d+'), entry))
  return(num_integers)

我想,如果我能找出一个数字不是整数的次数,我可以用它来给我这个数字,然后从其余的中减去它,但我也找不到。

我已经尝试多次计算有多少个数字,我一直在使用正则表达式,但找不到一种方法来使其与其他任何东西一起使用

我知道在理论上如何做到这一点,但我对如何在实践中做到这一点完全一无所知,每次我搜索我的答案时,它几乎总是给我关于如何找到数字的小数位而不是我正在寻找的结果

Python 整数 十进制

评论

0赞 Nick ODell 11/6/2023
我建议从拆分空格开始,然后遍历条目并检查每个条目是否为整数。可能比正则表达式更容易。entries = entry.split()
0赞 chepner 11/6/2023
如果你算作“非整数”,你可能也应该把“我们”、“庆祝”等算作非整数。 这里不是一个数字;它是一种日期格式。3.143.14

答:

1赞 aw4lly 11/6/2023 #1

如果您知道所有内容都将以空格分隔,那么我会使用它将其分成标记并检查字符。如果它尝试将其转换为浮点数 - 如果有效,则它是一个实数,否则它可能是一个带有句号的单词split..fin.

def integer_count(entry):
    entry_split = entry.split(' ')
    int_count = 0
    decimal_count = 0
    for word in entry_split:
        if '.' in word:
            try:
                float(word)
                decimal_count +=1
             except:
                pass
        elif word.isnumeric():
            int_count +=1
    return (int_count, decimal_count)
print(integer_count("hello world 1 2 2.3"))

如果这对你不起作用,我会做一个正则表达式寻找

int_count = len(re.findall((r'\d+'), word))
decimal_count = len(re.findall((r'\d+.d+'), word))
return int_count-decimal_count`

只要有人没有投入,也可能起作用。hello 2.3.3

评论

0赞 Matthias Schmidt 11/6/2023
手指交叉,没有人在点前加空格.😬
0赞 aw4lly 11/6/2023
这真的不是一个微不足道的问题。例如,“.2”是句号,然后是 2 吗?还是 0.2?您想用 or 做什么?或等。0. 40 . 42-3.2
0赞 Matthias Schmidt 11/6/2023 #2

它可能不漂亮,但这对我有用。查看此线程,了解一些更优雅的方法来辨别数字/整数/浮点数:如何检查字符串是否代表数字(浮点数或整数)?

def is_float(s):
try:
    float(s)
    try:
        int(s)
        return False
    except ValueError:
        return True
except ValueError:
    return False

string = "In 2014 we Celebrated 3.14 with 3 whole pies"
words = string.split()

ints = [int(w) for w in words if w.isnumeric()]
print(ints)
print(len(ints))

floats =[float(w) for w in words if is_float(w)]
print(floats)
print(len(floats))