2009-07-17 3 views
19

Say У меня есть список, как это:объединить некоторые элементы списка в списке Python

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

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

[a, b, c, def, g] 

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

+1

На каком основании следует слияние происходит? – Stephan202

+2

Что такое a, b и т. Д. (Т. Е. Какой тип данных)? Как бы то ни было, ввод текста в интерпретатор Python дает ошибку, потому что это несвязанные имена. –

+0

Вы всегда хотите, чтобы эти элементы в списке были объединены, или вы хотите, чтобы выбрать, где и сколько позже? – tgray

ответ

27

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

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])] 

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

+0

Это отлично подходит для списка строк. Если элементы не являются строками, вам нужно использовать что-то другое, кроме '.join() – tgray

+0

. Вы правы, я добавил пример с использованием 'reduce', который работает для любого типа элемента, который поддерживает' + ' оператор. Я не могу сделать больше, если только ОП не расширит свой вопрос. – Blixt

+0

Его вопрос не имеет смысла ни для чего другого, кроме строк. –

37

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

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

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

alist=["a", "b", "c", "d", "e", 0, "g"] 
alist[3:6] = [''.join(map(str,alist[3:6]))] 
print alist 
Смежные вопросы