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

使用Python 3查找给定范围内的元素计数?,python,Python,我有一个字符串,包含一系列数字。我需要知道范围内有多少元素。棘手的部分是,它可能是由连字符分隔的数字区域组合而成,也可能是由单个逗号分隔的数字组合而成。以下是一些具有预期计数的示例: 给定的值不会有任何重叠,因此我不必对此进行解释。(例如,你不会看到“1-10,5,6”) 这似乎是Python应该能够轻松完成的事情,但我不知道如何以Python的方式完成。我怎样才能完成这项任务 我目前拥有的: count = 0 range = "1,2,3-4" for a_range i

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

给定的值不会有任何重叠,因此我不必对此进行解释。(例如,你不会看到“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)

这将为你做这项工作。但请在下次发布您的尝试

[35]中的
:val=“1-10,12,14,16”
[50]中:value=[int(i.split('-')[-1])-int(i.split('-')[0])+1表示val.split('-')中的i]
In[53]:总和(值)
Out[53]:13

只需按不同的间隔将其拆分并检查值的计数。

首先,我们将定义要检查的字符串并从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
您可以尝试(不要将
range
用作变量名):


你能详细说明一下到目前为止你都尝试了什么吗?请重读,阅读,并提供一个答案。“为我实现此功能”是本网站的主题。你必须做一个诚实的尝试,然后问一个关于你的算法或技术的具体问题。“1-5,10-15”应该是11,而不是10。请在这里添加一些你的尝试的测试代码。如果我是,你可以删除这个
。\uu包含\uuu
,如果你用
[-1]
替换
[1]
。但请注意,您的解决方案是在每个范围内调用
.split('-')
两次,这有点不必要。@Stef关于校准
.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
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)))