扩展Python中的数字块

Sha*_*ter 9 python list variable-expansion python-2.7

在我问之前,我做了一些谷歌搜索,但无法找到答案.

我的方案是:将一个数字列表传递给脚本,通过文件分隔\n,或通过命令行arg以逗号分隔.数字可以是单数,也可以是块,如下所示:

文件:

1
2
3
7-10
15
20-25
Run Code Online (Sandbox Code Playgroud)

命令行Arg:

1, 2, 3, 7-10, 15, 20-25
Run Code Online (Sandbox Code Playgroud)

两者最终都在同一个列表中[].我想扩展7-10或20-25块(显然在实际脚本中这些数字会有所不同)并将它们附加到一个新列表中,最终列表如下所示:

['1','2','3','7','8','9','10','15','20','21','22','23','24','25']
Run Code Online (Sandbox Code Playgroud)

我理解像.append(range(7,10))这样的东西可以帮助我,但我似乎无法找出原始列表[]中哪些元素需要扩展.

所以,我的问题是:给定一个列表[]:

['1','2','3','7-10','15','20-25'],
Run Code Online (Sandbox Code Playgroud)

如何获得列表[]:

 ['1','2','3','7','8','9','10','15','20','21','22','23','24','25']
Run Code Online (Sandbox Code Playgroud)

ins*_*get 14

所以,假设您已获得列表:

L = ['1','2','3','7-10','15','20-25']
Run Code Online (Sandbox Code Playgroud)

并且您想扩展其中包含的所有范围:

answer = []
for elem in L:
    if '-' not in elem:
        answer.append(elem)
        continue
    start, end = elem.split('-')
    answer.extend(map(str, range(int(start), int(end)+1)))
Run Code Online (Sandbox Code Playgroud)

当然,这有一个方便的单行:

answer = list(itertools.chain.from_iterable([[e] if '-' not in e else map(str, range(*[int(i) for i in e.split('-')]) + [int(i)]) for e in L]))
Run Code Online (Sandbox Code Playgroud)

但是这会利用python2.7中泄漏变量的本质,我认为这在python3中不起作用.此外,它不是最易读的代码行.如果我是你,我真的不会在生产中使用它...除非你真的讨厌你的经理.

参考文献:  append()  continue  split()  extend()  map()  range()  list()  itertools.chain.from_iterable()  int()