使用Python 3查找给定范围内的元素计数



我有一个字符串,包含一系列数字。我需要知道这个范围内有多少元素。棘手的部分是,它可能是由连字符分隔的数字范围的组合,也可能是由逗号分隔的单个数字。一些具有预期计数的示例:

"1-10,12,14,16" : 13  
"8,14,0-5" : 8  
"0-32" : 33  
"1-5,10-15" : 11

给定的值不会有任何重叠,所以我不必对此进行解释。(例如,你不会看到"1-10,5,6"(

这似乎是Python应该能够轻松做到的,但我不知道如何以Python的方式做到这一点。我该如何完成这项任务?

我目前拥有的:

count = 0
range = "1,2,3-4"
for a_range in ranges:
if "-" in a_range:
first,last = a_range.split("-")
amt = int(last) - int(first) +1
else:
amt = 1
count += amt
print(count)

首先,我们将定义要检查的字符串,并从0:开始计数

string = "1-10,12,14,16"
num_amount = 0 

我们将用逗号分隔字符串,并获得值的列表

first_list = string.split(',')

然后,我们将在每个项目中搜索连字符分隔。如果没有"-",我们将在计数器中添加一个。如果有,我们减去数字,并将其添加到计数器

for i in first_list:
if i.find('-')>=0:
start_end = i.split('-')
addition = int(start_end[1]) - int(start_end[0]) + 1
num_amount += addition
else:
num_amount += 1

这将为您完成任务。但请从下次开始发布您的尝试。

In [35]: val = "1-10,12,14,16"
In [50]: values = [int(i.split('-')[-1]) - int(i.split('-')[0]) +1 for i in val.split(',')]
In [53]: sum(values)
Out[53]: 13

只需将其按不同的间隔拆分,然后检查值的计数即可。

您可以尝试(不要使用range作为变量名(:

import re
re_bounds = re.compile(r"(d+)(?:-(d+))?")
ranges = "0-32"
print(sum((int(right) - int(left) + 1 if right else 1)
for left, right in re_bounds.findall(ranges)))

最新更新