J'ai une chaîne avec des chiffres comme ça - digit = "7316717"
Maintenant, je veux diviser la chaîne de telle sorte que la sortie soit une fenêtre mobile de 3 chiffres à la fois. Je reçois donc -
["731", "316", "167", "671", "717"]
Comment serait l'approche? La manière la plus simple est de mettre en boucle et d'itérer. Mais je pense qu'une fonction de chaîne de python intégrée peut le faire en moins de code. Connaissez-vous une telle approche?
4 réponses
Les exemples itertools fournissent la fonction window
cela ne fait que cela:
from itertools import islice
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
Exemple d'utilisation:
>>> ["".join(x) for x in window("7316717", 3)]
['731', '316', '167', '671', '717']
digit = "7316717"
digit_sets = [digit[i:i+3] for i in range(len(digit)-2)]
Il existe une très bonne recette pairwise
dans docs itertools.
En le modernisant un peu pour les éléments n
du groupe, j'ai fait ce code:
from itertools import tee, izip
def window(iterable, n):
els = tee(iterable, n)
for i, el in enumerate(els):
for _ in xrange(i):
next(el, None)
return izip(*els)
print(["".join(i) for i in window("2316515618", 3)])
Python 2.7
>>> s = "7316717"
>>> [s[i:i+3] for i in range(len(s)-2)]
['731', '316', '167', '671', '717']
Questions connexes
Questions liées
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.