Подтвердить что ты не робот

Объединить некоторые элементы списка в списке Python

Скажем, у меня есть список вроде этого:

[a, b, c, d, e, f, g]

Как изменить этот список так, чтобы он выглядел так?

[a, b, c, def, g]

Я бы предпочел, чтобы он изменил существующий список напрямую, а не создал новый список.

4b9b3361

Ответ 1

На каком основании должно произойти слияние? Ваш вопрос довольно расплывчатый. Кроме того, я предполагаю, что 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']

Ознакомьтесь с документацией по типам последовательностей, в частности на изменяемые типы последовательностей. И, возможно, также в строковых методах.

Ответ 2

Этот пример довольно расплывчатый, но может быть, что-то вроде этого?

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
items[3:6] = [''.join(items[3:6])]

В основном он выполняет привязку (или присвоение срезу). Он удаляет элементы с 3 по 6 и вставляет вместо них новый список (в этом случае список с одним элементом, который является конкатенацией трех элементов, которые были удалены.)

Для любого типа списка вы можете сделать это (используя оператор + для всех элементов независимо от их типа):

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
items[3:6] = [reduce(lambda x, y: x + y, items[3:6])]

Это использует функцию reduce с lambda, которая в основном добавляет элементы вместе с помощью оператора +.

Ответ 3

просто вариация

alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist

Ответ 4

мои телепатические способности не особенно велики, но вот что я думаю, что вы хотите:

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

Я должен отметить, поскольку это может быть не очевидно, что это не то же самое, что предложено в других ответах.