我有一个整数列表,我需要解析为一系列范围.
例如:
[0, 1, 2, 3] -> "0-3"
[0, 1, 2, 4, 8] -> "0-2,4,8"
Run Code Online (Sandbox Code Playgroud)
等等.
我还在学习更多pythonic处理列表的方法,这对我来说有点困难.我最近的想法是创建一个列表,跟踪配对数字:
[ [0, 3], [4, 4], [5, 9], [20, 20] ]
Run Code Online (Sandbox Code Playgroud)
然后,我可以遍历此结构,将每个子列表打印为范围或单个值.
我不喜欢在两次迭代中这样做,但我似乎无法跟踪每次迭代中的每个数字.我的想法是做这样的事情:
这是我最近的尝试.它有效,但我并不完全满意; 我一直在想,有一个更优雅的解决方案完全逃脱了我.字符串处理迭代不是最好的,我知道 - 对我来说这是很早的:)
def createRangeString(zones):
rangeIdx = 0
ranges = [[zones[0], zones[0]]]
for zone in list(zones):
if ranges[rangeIdx][1] in (zone, zone-1):
ranges[rangeIdx][1] = zone
else:
ranges.append([zone, zone])
rangeIdx += 1
rangeStr = ""
for range in ranges:
if range[0] != range[1]:
rangeStr = "%s,%d-%d" % (rangeStr, range[0], range[1])
else:
rangeStr …Run Code Online (Sandbox Code Playgroud) 我在列表中有一系列数字,我正在寻找一个优雅的解决方案,最好是列表理解,以获得单个序列(包括单个值).我已经解决了这个小问题,但它并不是非常pythonic.
以下列表定义了输入序列:
input = [1, 2, 3, 4, 8, 10, 11, 12, 17]
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是:
output = [
[1, 2, 3, 4],
[8],
[10, 11, 12],
[17],
]
Run Code Online (Sandbox Code Playgroud)