首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析整数集的字符串和要列出的间隔

解析整数集的字符串和要列出的间隔
EN

Stack Overflow用户
提问于 2011-04-18 15:06:55
回答 6查看 3.9K关注 0票数 6

我有"2,5,7-9,12"字符串。

我想从它得到2,5,7,8,9,12份清单。

在python中有内置的函数吗?

谢谢。

,我想,直截了当的答案是No。不管怎样,谢谢你的“片段”。使用Sven Marnach的建议。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-10-20 18:27:29

这个版本处理任意空格、重叠范围、无序范围和负整数:

代码语言:javascript
复制
from itertools import chain

def group_to_range(group):
  group = ''.join(group.split())
  sign, g = ('-', group[1:]) if group.startswith('-') else ('', group)
  r = g.split('-', 1)
  r[0] = sign + r[0]
  r = sorted(int(__) for __ in r)
  return range(r[0], 1 + r[-1])

def rangeexpand(txt):
  ranges = chain.from_iterable(group_to_range(__) for __ in txt.split(','))
  return sorted(set(ranges))


>>> rangeexpand('-6,-3--1,3-5,7-11,14,15,17-20')
[-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
>>> rangeexpand('1-4,6,3-2, 11, 8 - 12,5,14-14')
[1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14]
票数 2
EN

Stack Overflow用户

发布于 2011-04-18 15:13:04

代码语言:javascript
复制
s = "2,5,7-9,12"
ranges = (x.split("-") for x in s.split(","))
print [i for r in ranges for i in range(int(r[0]), int(r[-1]) + 1)]

版画

代码语言:javascript
复制
[2, 5, 7, 8, 9, 12]
票数 15
EN

Stack Overflow用户

发布于 2011-04-18 15:13:02

代码语言:javascript
复制
s = "2,5,7-9,12"
result = list()

for item in s.split(','):
    if '-' in item:
        x,y = item.split('-')
        result.extend(range(int(x), int(y)+1))
    else:
        result.append(int(item))

print result
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5704931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档