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