将数字范围内的数字四舍五入
Rounding Up Numbers in Number Range
我想弄清楚如何处理我收到的号码范围的变化。我已经从数据帧中编译了它们,并试图以 100-200 / 200-300 / 300-400 格式获取所有范围。
有时会输入 300.400 而不是 300-400,有时会输入 300.5-400.5。如果可能的话,我还想解释一下输入为 300.5.400.5 的情况,因为尽管这很疯狂,但有人可能会这样做。我想我应该尝试计划在它们之间出现的任何不是“-”的字符。
简而言之,我想用小数舍入数字并替换非“-”字符分隔范围而不替换小数点。
请原谅我糟糕的代码:
num_range = [p.replace(' ', '') for p in num_dirty]
num_range = [p.replace(';', ' ') for p in num_dirty]
num_range = [p.replace('.', '-') for p in num_dirty]
num_clean = []
for r in num_dirty:
num_clean.append(r.split('/'))
num_clean = list(itertools.chain.from_iterable(num_clean))
num_clean = ','.join(num_clean)
我也在使用我在此处找到的这个函数来列出频率范围内的所有数字,以便我可以删除任何重复的范围:
num_lines = num_clean.split(',')
num_numbers = []
i = 0
for line in num_lines:
if line == '':
continue
elif '-' in line:
t = line.split('-')
num_numbers += range(int(t[0]), int(t[1]) + 1)
else:
num_numbers.append(int(line))
谢谢!
我运行你post
前两段的正则表达式
import re
from math import ceil
pat = re.compile(r'(\d+(?:\.\d+)?)\D(\d+(?:\.\d+)?)')
l = [(ceil(float(a)), ceil(float(b))) for a, b in pat.findall(your_post)]
print(l)
# [(100, 200), (200, 300), (300, 400), (300, 400), (300, 400), (301, 401), (301, 401)]
从那里你可以生成你想要的格式化字符串
for pair in l:
print("{}-{}".format(*pair))
我想弄清楚如何处理我收到的号码范围的变化。我已经从数据帧中编译了它们,并试图以 100-200 / 200-300 / 300-400 格式获取所有范围。
有时会输入 300.400 而不是 300-400,有时会输入 300.5-400.5。如果可能的话,我还想解释一下输入为 300.5.400.5 的情况,因为尽管这很疯狂,但有人可能会这样做。我想我应该尝试计划在它们之间出现的任何不是“-”的字符。
简而言之,我想用小数舍入数字并替换非“-”字符分隔范围而不替换小数点。
请原谅我糟糕的代码:
num_range = [p.replace(' ', '') for p in num_dirty]
num_range = [p.replace(';', ' ') for p in num_dirty]
num_range = [p.replace('.', '-') for p in num_dirty]
num_clean = []
for r in num_dirty:
num_clean.append(r.split('/'))
num_clean = list(itertools.chain.from_iterable(num_clean))
num_clean = ','.join(num_clean)
我也在使用我在此处找到的这个函数来列出频率范围内的所有数字,以便我可以删除任何重复的范围:
num_lines = num_clean.split(',')
num_numbers = []
i = 0
for line in num_lines:
if line == '':
continue
elif '-' in line:
t = line.split('-')
num_numbers += range(int(t[0]), int(t[1]) + 1)
else:
num_numbers.append(int(line))
谢谢!
我运行你post
前两段的正则表达式import re
from math import ceil
pat = re.compile(r'(\d+(?:\.\d+)?)\D(\d+(?:\.\d+)?)')
l = [(ceil(float(a)), ceil(float(b))) for a, b in pat.findall(your_post)]
print(l)
# [(100, 200), (200, 300), (300, 400), (300, 400), (300, 400), (301, 401), (301, 401)]
从那里你可以生成你想要的格式化字符串
for pair in l:
print("{}-{}".format(*pair))