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()
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |