web-dev-qa-db-fra.com

Fusionner certains éléments de liste dans une liste Python

Disons que j'ai une liste comme celle-ci:

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

Comment modifier cette liste pour qu'elle ressemble à ceci?

[a, b, c, def, g]

Je préférerais de beaucoup qu'il modifie directement la liste existante, pas créé une nouvelle liste.

34
Leslie

Sur quelle base la fusion devrait-elle avoir lieu? Votre question est assez vague. En outre, je suppose que a, b, ..., f sont censés être des chaînes, c'est-à-dire 'a', 'b', ..., 'f'.

>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> x[3:6] = [''.join(x[3:6])]
>>> x
['a', 'b', 'c', 'def', 'g']

Consultez la documentation sur types de séquences , en particulier sur types de séquences mutables . Et peut-être aussi sur méthodes de chaîne .

50
Stephan202

Cet exemple est assez vague, mais peut-être quelque chose comme ça?

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

Il fait essentiellement une opération d'épissage (ou affectation à une tranche ). Il supprime les éléments 3 à 6 et insère une nouvelle liste à leur place (dans ce cas, une liste avec un élément, qui est la concaténation des trois éléments qui ont été supprimés.)

Pour tout type de liste, vous pouvez le faire (en utilisant le + opérateur sur tous les éléments, quel que soit leur type):

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

Cela utilise la fonction reduce avec une fonction lambda qui additionne les éléments ensemble à l'aide de la fonction + opérateur.

33
Blixt

juste une variation

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

mes capacités télépathiques ne sont pas particulièrement grandes, mais voici ce que je pense que vous voulez:

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

Je devrais noter, car ce n'est peut-être pas évident, que ce n'est pas la même chose que ce qui est proposé dans d'autres réponses.

0
SilentGhost

Bien sûr, @ Stephan202 a donné une réponse vraiment sympa. Je propose une alternative.

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

Vous pouvez également effectuer les opérations suivantes.

x = x[:min_index] + [''.join(x[min_index:max_index])] + x[max_index:]
print(x)

>>>['a', 'b', 'c', 'def', 'g']
0
Samuel Nde