我正在尝试查找值以“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}")
我想稍后使用第一次、第二次和最后一次出现作为索引,所以我需要知道顺序。所以,单独统计连续的和单独的,然后相加是行不通的。我将不胜感激任何帮助。非常感谢。
解决此问题的另一种方法是首先将字符串转换为 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