按顺序复杂计数

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

我正在尝试查找值以“4”开头的实例。或“5”。 (例如 4.004、5.066)出现在列中。但它们有时会连续出现,在这种情况下,我想将它们算作一个实例。当该值单独存在时,我也想将其算作一个实例。因此,在示例数据中,出现次数应该是 3 次(即“4.006 和 5,003”、“4.003”和“5.009、4.069、4.005”)。

import re

data = """
0.222
4.006
5.003
0.993
4.003
0.006
5.009
4.069
4,005
0.344
"""


matches = re.findall(r'(?:4\.|5\.)+|(?:4\.|5\.)', data)

occurrences_count = len(matches)

print(f"Total occurrences: {occurrences_count}")

我想稍后使用第一次、第二次和最后一次出现作为索引,所以我需要知道顺序。所以,单独统计连续的和单独的,然后相加是行不通的。我将不胜感激任何帮助。非常感谢。

python indexing pycharm counting
1个回答
0
投票

解决此问题的另一种方法是首先将字符串转换为 numpy 数组,如下所示,然后使用 numpy 操作来回答您的问题:

import numpy as np
arr = np.array([float(x.replace(",", ".")) for x in data.split("\n") if len(x)])
arr

打印:

array([0.222, 4.006, 5.003, 0.993, 4.003, 0.006, 5.009, 4.069, 4.005,
       0.344])

然后您可以屏蔽

>=4
<=6
的数组,并使用解决方案 here 来计算 True 组:

arr = (arr >= 4) & (arr <= 6)
np.sum(np.diff(arr, prepend=False, append=False))//2

输出:

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