说我有这样的清单:
[a, b, c, d, e, f, g]
如何修改该列表以使其看起来像这样?
[a, b, c, def, g]
我更希望它直接修改现有列表,而不是创建新列表。
答案 0 :(得分:48)
合并的基础是什么?你的问题很模糊。另外,我假设a,b,...,f应该是字符串,即'a','b',...,'f'。
>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> x[3:6] = [''.join(x[3:6])]
>>> x
['a', 'b', 'c', 'def', 'g']
查看sequence types上的文档,特别是mutable sequence types上的文档。也许也在string methods上。
答案 1 :(得分:32)
这个例子很模糊,但也许是这样的?
items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
items[3:6] = [''.join(items[3:6])]
它基本上执行拼接(或assignment to a slice)操作。它删除了第3到第6项并在其位置插入了一个新列表(在这种情况下是一个包含一个项目的列表,这是已删除的三个项目的串联。)
对于任何类型的列表,您都可以这样做(对所有项目使用+
运算符,无论其类型是什么):
items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
items[3:6] = [reduce(lambda x, y: x + y, items[3:6])]
答案 2 :(得分:5)
只是变种
alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist
答案 3 :(得分:0)
我的心灵感应能力并不是特别好,但这就是我认为你想要的:
def merge(list_of_strings, indices):
list_of_strings[indices[0]] = ''.join(list_of_strings[i] for i in indices)
list_of_strings = [s for i, s in enumerate(list_of_strings) if i not in indices[1:]]
return list_of_strings
我应该注意,因为它可能并不明显,它与其他答案中提出的不一样。
答案 4 :(得分:0)
当然,@ Stephan202给出了一个非常好的答案。我提供了一种替代方法。
def compressx(min_index = 3, max_index = 6, x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']):
x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
return x
compressx()
>>>['a', 'b', 'c', 'def', 'g']
您还可以执行以下操作。
x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
print(x)
>>>['a', 'b', 'c', 'def', 'g']