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

Dire que j'ai une liste comme ceci:

[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 qu'il modifie la liste existante directement, pas créer une nouvelle liste.

26
demandé sur Trilarion 2009-07-17 16:03:05

4 réponses

Sur quelle base devrait la fusion? Votre question est assez vague. Aussi, je suppose a, b,..., f sont censés être des chaînes de caractères, qui est, '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, plus précisément sur types de séquences mutables. Et peut-être également sur méthodes string.

40
répondu Stephan202 2009-07-17 12:08:15

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 un splice (ou affectation d'une tranche). Il supprime les articles 3 à 6 et insère une nouvelle liste à leur place (dans ce cas une liste avec un seul élément, qui est la concaténation des trois éléments qui ont été supprimés.)

pour tout type de liste, vous pouvez faire ceci (en utilisant le + opérateur sur tous les points, quel que soit leur type est):

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

ceci utilise le reduce fonction avec un lambda fonction qui additionne les éléments en utilisant + opérateur.

30
répondu Blixt 2009-07-17 13:00:19

juste une variation

alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist
4
répondu ghostdog74 2009-07-17 12:43:12

mes capacités télépathiques sont pas particulièrement grand, 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 dois noter, puisque 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
répondu SilentGhost 2009-07-17 12:24:04