我不太清楚如何提出这个问题,甚至在Google上搜索答案,但我会在这里写出来.我有一个整数的排序列表,对应于文件中的行号.我想将它们转换为字符串,但对于顺序的数字,我希望字符串具有序列的第一个数字,短划线,然后是最后一个数字.这是一个例子:
line_nums = [ 1, 2, 3, 5, 7, 8, 9, 10 ]
Run Code Online (Sandbox Code Playgroud)
我想将该列表转换为:
[ '1-3', '5', '7', '8-10' ]
Run Code Online (Sandbox Code Playgroud)
我写了一些大部分都有效的代码.在某些序列中,它会将相同的数字放在字符串中两次.在最近执行此代码时,输入是:
[ 10007, 10008, 10009, 10010, 10011, 10013, 10015, 10016, 10017, 10018, 10019 ]
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
[ '10007-10011', '10013-10013', '10015-10019' ]
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
def get_line_numbers_concat(line_nums):
seq = []
final = []
last = 0
for index, val in enumerate(line_nums):
if last + 1 == val or index == 0:
seq.append(val)
last = val
else:
final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
seq = []
seq.append(val)
last = val
if index == len(line_nums) - 1:
if len(seq) > 1:
final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
else:
final.append(str(seq[0]))
final_str = ', '.join(map(str, final))
return final_str
Run Code Online (Sandbox Code Playgroud)
你几乎就在那里,除非在这种情况下,你seq[0]实际上是相同的元素,seq[len(seq)-1]然后你简化到下面的情况len(seq)==1或如下所示,if len(seq) > 1然后你执行你的正常处理,否则只需添加第一个元素.
def get_line_numbers_concat(line_nums):
seq = []
final = []
last = 0
for index, val in enumerate(line_nums):
if last + 1 == val or index == 0:
seq.append(val)
last = val
else:
if len(seq) > 1:
final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
else:
final.append(str(seq[0]))
seq = []
seq.append(val)
last = val
if index == len(line_nums) - 1:
if len(seq) > 1:
final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
else:
final.append(str(seq[0]))
final_str = ', '.join(map(str, final))
return final_str
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |