根据给定的索引合并列表中的元素

时间:2017-04-21 19:06:02

标签: python list

我想根据给定的元组的开始和停止索引(元组的非重叠)合并列表中的元素。我会留下那些没有提及的指数。这是我的例子

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))循环,但它似乎不是解决此问题的正确方法。如果有人有简单的方法来解决这个问题,请告诉我。

3 个答案:

答案 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]:]

但是,只有在没有重叠间隔时才有效。