J'ai une entrée comme celle-ci:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Je veux joindre des éléments entre ''
pour avoir une sortie comme celle-ci:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
J'ai essayé d'utiliser join
et de lister les tranches comme ceci:
a=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a[2:5] = [''.join(a[ 2: 5])]
a=['assembly', '', 'python', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Cela fonctionne dans une certaine mesure mais je ne sais pas comment répéter cette instruction pour la liste entière.
C'est affreux et hacky, mais
peut prendre n'importe quelle chaîne que vous pouvez garantir n'est pas contenue dans la concaténation de la liste et retourner une fonction faisant ce que vous voulez. Bien sûr, vous ne voudrez probablement l'utiliser qu'une ou deux fois pour votre situation spécifique, donc, si vous pouvez garantir qu'aucun élément de la liste ne contient d'espace, cela pourrait ressembler davantage à:
la source
Si vous ne pouvez pas ou ne voulez pas utiliser itertools:
la source
Tu peux le faire:
Production:
Modifier après les commentaires:
Production:
la source
# get the indices.
n'est pas un commentaire très utile. Je vous suggère soit de le rendre utile (par exemplefilter the indices to keep only those that correspond to whitespace
), soit de le supprimer entièrement.indices = [i for s in a if s == '']
?indx = [i for i, x in enumerate(a) if x == '']
a = ['asse','mbly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c+', '+']
mais il semble que vous pourriez améliorer votre ligne 3 en ajoutant une liste avec une chaîne nulle aux extrémités d'unenumerate([''] + a + [''])
puis en supprimant lea[0:indx[0]]
eta[indx[-1]+1:]
sur votre ligne 4. Cela ne tient toujours pas compte s'il y a deux chaînes nulles juste à côté l'une de l'autre cependantSi les délimiteurs d'entrée sont en fait des chaînes vides, vous pouvez le faire
la source
Assez vieux mais toujours utile:
Cela donne
la source
exécuter une boucle sur la liste
à l'intérieur de la boucle ajouter l'élément à une chaîne vide temporaire et vérifier la condition si l'élément est une chaîne vide ou le dernier élément de la liste, si vrai, ajouter la variable temporaire à la liste de sortie et modifier la valeur de cette variable dans une chaîne vide
Code:
Production:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
la source
Je conviens que la réponse Cris utilise la plupart des approches python , mais il sera bon d'adapter un peu la réponse Cris . Au lieu d'utiliser
groupby(l,key = bool)
pour utilisergroupby(l, key = lambda x: x !='')
et se débarrasser de l' ambiguïté inutilePS J'écris seulement la nouvelle réponse parce que je n'ai pas assez de réputation pour écrire un commentaire sur la réponse de Cris .
la source
Une autre version de travail, avec seulement des boucles / tests de base:
la source