我有"2,5,7-9,12"
字符串。解析字符串的整數集間隔列表
我想從中得到[2,5,7,8,9,12]列表。
python中是否有任何內置函數?
謝謝。
UPD。我想,直接回答是沒有。無論如何,感謝您的「片段」。使用一個,由建議Sven Marnach。
我有"2,5,7-9,12"
字符串。解析字符串的整數集間隔列表
我想從中得到[2,5,7,8,9,12]列表。
python中是否有任何內置函數?
謝謝。
UPD。我想,直接回答是沒有。無論如何,感謝您的「片段」。使用一個,由建議Sven Marnach。
This version處理任意的空白,重疊範圍,亂序範圍內,以及負的整數:
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]
不,我知道的,但你可以輕鬆地製作自己:
,
並開始迭代結果。
-
將範圍追加到列表。有人必須心情不好才能降低所有這些正確的答案。我會把他們帶回零:) – 2011-04-18 15:19:04
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
爲什麼downvote?據我所知,這是正確的。 – 2011-04-18 15:15:58
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)]
打印
[2, 5, 7, 8, 9, 12]
真的很好。我們甚至可以將它合併成一行。 – disfated 2011-04-18 15:29:30
我不知道任何內置的功能,將做到這一點的。以下是不是特別優雅,但能夠完成任務:
s = "2,5,7-9,12"
ret = []
for tok in s.split(","):
val = map(int, tok.split("-"))
if len(val) == 1:
ret += val
else:
ret += range(val[0], val[1] + 1)
print ret
一個領域是該解決方案可能需要的工作是負數的處理(這是不是從你的問題負數是否能出現完全清楚輸入)。
這似乎也是正確的。爲什麼downvote? – 2011-04-18 15:17:13
在我的情況下,我只需要處理積極的INT,雖然它是好的,有通用的解決方案。 – disfated 2011-04-18 15:35:52
我將定義函數:
def make_range(s):
out = []
s = s.split(',')
for n in s:
if '-' in n:
n = n.split('-')
for i in range(int(n[0]), int(n[1]) + 1):
out.append(i)
else:
out.append(int(n))
return out
print make_range("2,5,7-9,12")
#output [2, 5, 7, 8, 9, 12]
重複。 http://stackoverflow.com/questions/712460/interpreting-number-ranges-in-python – 2011-04-18 17:16:06