我想根据给定的元组的开始和停止索引(元组的非重叠)合并列表中的元素。我会留下那些没有提及的指数。这是我的例子
ls = ['1', '2', '3', '4', '5', '6', '7']
merge = [(1, 3), (5, 7)]
在这里,我想将[1:3]
的索引和[5:7]
合并在一起,这样输出应该如下所示
['1', '23', '4', '5', '67']
我尝试使用range(len(ls))
循环,但它似乎不是解决此问题的正确方法。如果有人有简单的方法来解决这个问题,请告诉我。
答案 0 :(得分:7)
快速而肮脏的解决方案是:
ls = ['1', '2', '3', '4', '5', '6', '7']
merge = [(1, 3), (5, 7)]
result = []
index = 0
for start, end in merge:
result += ls[index:start]
result.append("".join(ls[start:end]))
index = end
print result # ['1', '23', '4', '5', '67']
答案 1 :(得分:3)
短"技巧"使用反向JMETER_HOME\bin
列表:
merge
输出:
ls = ['1', '2', '3', '4', '5', '6', '7']
merge = [(1, 3), (5, 7)]
for t in merge[::-1]:
merged = ''.join(ls[t[0]:t[1]]) # merging values within a range
ls[t[0]:t[1]] = [merged] # slice replacement
print(ls)
答案 2 :(得分:1)
为了它的乐趣,因为我一直在学习Haskell,一个递归的解决方案:
def recursive(ls, merge):
if merge == []:
return ls
else:
x, xs = merge[0], merge[1:]
return ls[:x[0]] + [''.join(ls[x[0]:x[1]])] + recursive(ls, xs)[x[1]:]
但是,只有在没有重叠间隔时才有效。