length - python string substring
Convertir una lista de caracteres en una cadena (11)
Si tengo una lista de caracteres:
a = [''a'',''b'',''c'',''d'']
¿Cómo lo convierto en una sola cadena?
a = ''abcd''
Esta puede ser la forma más rápida:
>> from array import array
>> a = [''a'',''b'',''c'',''d'']
>> array(''B'', map(ord,a)).tostring()
''abcd''
Esto funciona en JavaScript o Ruby, ¿por qué no en Python?
>>> [''a'', ''b'', ''c''].join('''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: ''list'' object has no attribute ''join''
Pero en Python, el método de join
está en la clase str
:
# this is the Python way
"".join([''a'',''b'',''c'',''d''])
Es un poco raro, ¿no? ¿Por qué join
no es un método en la list
objetos como en JavaScript u otros lenguajes de script populares? Es un ejemplo de cómo piensa la comunidad de Python. Dado que join está devolviendo una cadena, debe colocarse en la clase de cadena, no en la clase de lista, por lo que el str.join(list)
significa: unir la lista en una cadena nueva usando str
como separador (en este caso, str
es una cadena vacía).
De alguna manera me llegó a amar esta forma de pensar después de un tiempo. Puedo quejarme de muchas cosas en el diseño de Python, pero no de su coherencia.
La función de reducción también funciona.
import operator
h=[''a'',''b'',''c'',''d'']
reduce(operator.add, h)
''abcd''
Si la lista contiene números, puede usar map()
con join()
.
P.ej:
arr = [3, 30, 34, 5, 9]
''''.join(map(str,arr))
>> 3303459
Si su intérprete de Python es antiguo (1.5.2, por ejemplo, lo que es común en algunas distribuciones de Linux más antiguas), es posible que no tenga join()
disponible como método en cualquier objeto de cadena anterior, y en su lugar necesitará usar la cadena módulo. Ejemplo:
a = [''a'', ''b'', ''c'', ''d'']
try:
b = ''''.join(a)
except AttributeError:
import string
b = string.join(a, '''')
La cadena b
será ''abcd''
.
También puedes usar operator.concat()
esta manera:
>>> from operator import concat
>>> a = [''a'', ''b'', ''c'', ''d'']
>>> reduce(concat, a)
''abcd''
Si estás usando Python 3 necesitas prepend:
>>> from functools import reduce
ya que el builtin reduce()
se ha eliminado de Python 3 y ahora vive en functools.reduce()
.
Utilice el método de join
de la cadena vacía para unir todas las cadenas junto con la cadena vacía en el medio, así:
>>> a = [''a'', ''b'', ''c'', ''d'']
>>> ''''.join(a)
''abcd''
utilizar join
con separador vacío
h = [''a'',''b'',''c'',''d'',''e'',''f'']
print ''''.join(h)
o usar reduce
con add
operador
import operator
h=[''a'',''b'',''c'',''d'']
reduce(operator.add, h)
str = ''''
for letter in a:
str += letter
print str
g = [''a'', ''b'', ''c'', ''d'']
f=''''
for i in range(0,len(g)):
f=f+g[i]
print f
h = [''a'',''b'',''c'',''d'',''e'',''f'']
g = ''''
for f in h:
g = g + f
>>> g
''abcdef''