为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2023-09-05 15:45:57
我有一个字符串,包含一系列数字。我需要知道该范围内有多少元素。棘手的部分是,它可能是连字符分隔的数字范围或单个逗号分隔数字的组合。一些具有预期计数的示例:"1-10,12,14,16" : 13  "8,14,0-5" : 8  "0-32" : 33  "1-5,10-15" : 11给定的值不会有任何重叠,因此我不必考虑这一点。(例如,您不会看到“1-10,5,6”)这似乎是Python应该能够轻松完成的事情,但我不知道如何以Pythonic方式做到这一点。我怎样才能完成这个任务?我目前拥有的:count = 0range = "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 += amtprint(count)
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

首先,我们定义要检查的字符串并从 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


查看完整回答
反对 回复 2023-09-05
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

这将为您完成这项工作。但请从下次开始发布您的尝试。


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

只需以不同的时间间隔分割并检查值的计数即可。


查看完整回答
反对 回复 2023-09-05
?
PIPIONE

TA贡献1829条经验 获得超9个赞

您可以尝试(不要用作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)))


查看完整回答
反对 回复 2023-09-05
  • 3 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信