Объединить некоторые элементы списка в список Python - PullRequest
33 голосов
/ 17 июля 2009

Скажи, у меня есть такой список:

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

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

[a, b, c, def, g]

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

Ответы [ 5 ]

48 голосов
/ 17 июля 2009

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

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

32 голосов
/ 17 июля 2009

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

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, которая в основном добавляет элементы вместе с помощью оператора +.

5 голосов
/ 17 июля 2009

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

alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist
0 голосов
/ 21 марта 2019

Конечно @ 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']
0 голосов
/ 17 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...