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.
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.
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.
juste une variation
alist=["a", "b", "c", "d", "e", 0, "g"]
alist[3:6] = [''.join(map(str,alist[3:6]))]
print alist
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.