2010-05-22 23 views
5

cómo entrar en python desde cadena no un carácter, sino dos?Obteniendo dos caracteres de cadena en python

tengo:

long_str = 'abcd' 
for c in long_str: 
    print c 

y me da igual que

a 
b 
c 
d 

pero necesito conseguir

ab 
cd 

Soy nuevo en Python .. ¿hay alguna manera ?

+0

relacionados con "¿Cuál es el más‘camino Pythonic’para iterar sobre una lista en trozos ? " http://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to-iterate-over-a-list-in-chunks – jfs

Respuesta

6
for i, j in zip(long_str[::2], long_str[1::2]): 
    print (i+j) 

o

import operator 
for s in map(operator.add, long_str[::2], long_str[1::2]): 
    print (s) 

itertools también proporcionan una implementación generalizada de esta:

def grouper(n, iterable, fillvalue=None): 
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return izip_longest(fillvalue=fillvalue, *args) 
+0

muchas gracias :) – Adomas

10

Puede usar la notación de sectores. long_str[x:y] le dará caracteres en el rango [x, y) (donde x está incluido y y no).

>>> for i in range(0, len(long_str) - 1, 2): 
... print long_str[i:i+2] 
... 
ab 
cd 

Aquí estoy usando el operador de rango de tres argumentos para denotar inicio, final y la etapa (ver http://docs.python.org/library/functions.html).

Tenga en cuenta que para una cadena de longitud impar, esto no tomará el último carácter. Si quiere el último carácter por sí mismo, cambie el segundo argumento de range a len(long_str).

+0

muchas gracias :) – Adomas

+0

¡De nada! Marque la respuesta como aceptada si considera que es la más útil. – danben

+0

¡Me olvidé de esto! – juniorRubyist

Cuestiones relacionadas