猿问

使用 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应该能够轻松完成的事情,但我不知道如何以Pythonic方式做到这一点。我怎样才能完成这个任务?


我目前拥有的:


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)


Smart猫小萌
浏览 135回答 3
3回答

aluckdog

首先,我们定义要检查的字符串并从 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只需以不同的时间间隔分割并检查值的计数即可。

PIPIONE

您可以尝试(不要用作range变量名):import rere_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)))
随时随地看视频慕课网APP

相关分类

Python
我要回答