我正在编写一个生成整数列表的程序,例如:
[2, 5, 6, 7, 8, 9, 10, 15, 18, 19, 20]
此列表可能很长,但它包含许多连续值,如本例所示。
为了存储它(在数据库中),我想将其转换为格式化字符串,格式如下:
"2,5-10,15,18-20"
我已经考虑过一个解决方案,它遍历整个列表以检测连续值并构建字符串。
我的问题是:在Python中有另一种更简单的方法吗?
答案 0 :(得分:1)
不完全简单,但这会产生预期的结果:
nc -zv <ip> 1433
显示:
from itertools import groupby, count
from operator import itemgetter
a = [2, 5, 6, 7, 8, 9, 10, 15, 18, 19, 20]
formatted = ','.join(str(x) if x == y else "{}-{}".format(x, y) for x, y in [itemgetter(0, -1)(list(g)) for k, g in groupby(a, lambda n, c = count(): n - next(c))])
print(formatted)
答案 1 :(得分:0)
据我所知,您提出的解决方案是唯一的选择:
没有理由存储为字符串,可以存储为字符串列表而不是