Python split pour les listes
Si nous avons un list
de strings
en python et que vous voulez créer des sous-listes basées sur certains string
comment devrions-nous le faire?
Par exemple:
l = ["data","more data","","data 2","more data 2","danger","","date3","lll"]
p = split_special(l,"")
générerait:
p = [["data","more data"],["data 2","more data 2","danger"],["date3","lll"]]
Pourquoi la programmation fonctionnelle tag?
pour obtenir une réponse fonctionnelle à l'aide de méthodes de programmation en python
pour obtenir une réponse fonctionnelle à l'aide de méthodes de programmation en python
OriginalL'auteur ppaulojr | 2013-01-25
Vous devez vous connecter pour publier un commentaire.
itertools.groupby est une approche (comme c'est souvent le cas):
On peut même tricher un peu à cause de ce cas particulier:
lambda x: not x
ou tout simplementoperator.not_
OriginalL'auteur DSM
Une possible mise en œuvre à l'aide de itertools
Note*
C'est aussi rapide que d'utiliser groupby
groupby(l, lambda x: x ="")
ligne? Il ne fait rien. En outre,[list(group) for k, group in groupby(l, bool) if k]
devrait être de 10%+ rapide.J'ai eu tort de l'ajouter, mais en enlevant ce n'est pas beaucoup de distance. Btw, comme vous l'avez mentionné, de la même manière,
[list(takewhile(bool, it_l)) for e in it_l if e != ""]
doivent aussi être plus rapide, mais je me sens encore, la différence est négligeable et comparables.OriginalL'auteur Abhijit
réduction
vient à l'esprit:Résultat:
reduce
en python est en faitfoldl
dans CS termes - le CSreduce
doit être utilisé sur une fonction qui ne se soucient pas dans quel ordre les entrées venir. Cela peut vous causer des ennuis si vous essayez dereduce
dans d'autres langues.OriginalL'auteur pillmuncher
Je ne suis pas sûr que c'est le plus "pythonic" façon de le résoudre.
list(split_seq(ll,"")
OriginalL'auteur ppaulojr
Heres une idée. 🙂
OriginalL'auteur Paul Seeb