3
votes

Comment diviser une liste par chaîne

J'ai plusieurs grandes listes de chaînes. Je dois diviser toutes ces listes en deux listes afin de ne conserver que la deuxième liste. Par exemple:

.replace('\\', '')

Je veux saisir uniquement les chaînes après 'split_here' afin que la nouvelle liste soit la suivante:

new_list = str(lst).split('split_here')[1]

I essayé ceci:

new_lst = ['something else', 'we like cake', 'aardvarks']

Mais la nouvelle sortie a un tas de caractères d'échappement (le symbole "\"). J'ai essayé de les remplacer par:

lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']

Mais cela n'a pas fonctionné non plus.

Je pense qu'il doit y avoir un moyen simple de faire cela qui me manque.


0 commentaires

3 Réponses :


9
votes

Vous recherchez des opérations de liste, pas des opérations de chaîne. Nous avons juste besoin de trouver la position où apparaît la chaîne de séparation, et de prendre une tranche à partir de l'élément suivant, comme ceci:

new_list
=> ['something else', 'we like cake', 'aardvarks']

Ce qui précède suppose que la chaîne de séparation est présente dans la liste, sinon, nous obtiendrons une ValueError . Le résultat est comme prévu:

lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
new_list = lst[lst.index('split_here')+1:]


2 commentaires

Je vous remercie! C'était beaucoup plus simple que les choses que j'essayais. :)


@RagnarLothbrok Veuillez considérer ceci: stackoverflow.com/help/someone-answers



2
votes

Utiliser list # index est probablement la solution la plus propre.

Pourtant, depuis vous essayiez de trouver une solution avec des chaînes et du fractionnement, vous pourriez utiliser:

>>> lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
>>> '#'.join(lst)
'This is a list#of strings#blahblahblah#split_here#something else#we like cake#aardvarks'
>>> '#'.join(lst).split('split_here#')
['This is a list#of strings#blahblahblah#', 'something else#we like cake#aardvarks']
>>> '#'.join(lst).split('split_here#')[-1]
'something else#we like cake#aardvarks'
>>> '#'.join(lst).split('split_here#')[-1].split('#')
['something else', 'we like cake', 'aardvarks']

Notez que cela ne fonctionne que si vous êtes sûr que # n'apparaît jamais dans vos chaînes.

Voici les étapes indiquées dans la console:

'#'.join(lst).split('split_here#')[-1].split('#')


0 commentaires

1
votes

En plus de la réponse aux Oscars, vous pouvez également utiliser itertools.drop while () :

from itertools import dropwhile

lst = ['This is a list', 'of strings', 'blahblahblah', 'split_here', 'something else', 'we like cake', 'aardvarks']
new_list = list(dropwhile(lambda x: x != 'split_here',lst))[1:]


0 commentaires