如何将数字字符串范围转换为Python中的列表

jnc*_*ton 18 python string list

我希望能够将诸如"1,2,5-7,10"之类的字符串转换为诸如[1,2,5,6,7,10]之类的python列表.我环顾四周找到了这个,但我想知道在Python中是否有一个简洁明了的方法.

Fog*_*ird 29

>>> def f(x):
...     result = []
...     for part in x.split(','):
...         if '-' in part:
...             a, b = part.split('-')
...             a, b = int(a), int(b)
...             result.extend(range(a, b + 1))
...         else:
...             a = int(part)
...             result.append(a)
...     return result
... 
>>> f('1,2,5-7,10')
[1, 2, 5, 6, 7, 10]
Run Code Online (Sandbox Code Playgroud)

  • 这将是一个很好的发电机. (4认同)

JBe*_*rdo 5

我能够真正理解这个问题:

>>> def f(s):
    return sum(((list(range(*[int(j) + k for k,j in enumerate(i.split('-'))]))
         if '-' in i else [int(i)]) for i in s.split(',')), [])

>>> f('1,2,5-7,10')
[1, 2, 5, 6, 7, 10]

>>> f('1,3-7,10,11-15')
[1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15]
Run Code Online (Sandbox Code Playgroud)

另一个具有理解力的答案只是一个for循环,因为最终列表被丢弃了。:)

对于python 2,您甚至可以删除对list!的调用!