Únase a una lista de elementos con diferentes tipos como cadena en Python

292

Necesito unirme a una lista de artículos. Muchos de los elementos de la lista son valores enteros devueltos por una función; es decir,

myList.append(munfunc()) 

¿Cómo debo convertir el resultado devuelto en una cadena para unirlo con la lista?

¿Debo hacer lo siguiente para cada valor entero:

myList.append(str(myfunc()))

¿Hay alguna forma más pitónica de resolver problemas de lanzamiento?

AKM
fuente
3
Por favor, asegúrese de usar una buena gramática para que las personas puedan entender lo que está preguntando y / o volver a leer su pregunta antes de publicar.
allyourcode

Respuestas:

537

Llamar str(...)es la forma pitónica de convertir algo en una cadena.

Es posible que desee considerar por qué quiere una lista de cadenas. En su lugar, podría mantenerlo como una lista de enteros y solo convertir los enteros en cadenas cuando necesite mostrarlos. Por ejemplo, si tiene una lista de enteros, puede convertirlos uno por uno en un ciclo for y unirlos con ,:

print(','.join(str(x) for x in list_of_ints))
Mark Byers
fuente
175

No hay nada de malo en pasar enteros a str. Una razón por la que no puede hacer esto es que se supone que myList es realmente una lista de enteros, por ejemplo, sería razonable sumar los valores de la lista. En ese caso, no pase sus entradas a str antes de agregarlas a myList. Si termina sin convertir en cadenas antes de agregar, puede construir una cadena grande haciendo algo como

', '.join(map(str, myList))
allyourcode
fuente
36
Presumiblemente el inglés no es su lengua materna. ¿No está seguro de su deseo de unirse a una lista de elementos a los que se está convirtiendo str? Considere la posibilidad de que necesite agregar algo de lógica difusa a su analizador ;-)
John Machin
3
@John Lo consideré, pero si él es bueno en inglés, quería empujarlo suavemente para llevar el nivel de inglés en SO a su nivel normal. Creo que mi respuesta no entretener a diversas interpretaciones y situaciones que podría estar en.
allyourcode
41

Se puede utilizar la función de mapa en python. Se necesitan dos argumentos. El primer argumento es la función que debe usarse para cada elemento de la lista. El segundo argumento es el iterable .

a = [1, 2, 3]   
map(str, a)  
['1', '2', '3']

Después de convertir la lista en cadena que puede utilizar sencilla unirse a la función a la lista de combinar en una sola cadena

a = map(str, a)    
''.join(a)      
'123'
Prakash N
fuente
10
a=[1,2,3]
b=[str(x) for x in a]
print b

El método anterior es la forma más fácil y general de convertir la lista en una cadena. otro método corto es

a=[1,2,3]
b=map(str,a)
print b
Prateek Verma
fuente
4

Hay tres formas de hacer esto.

digamos que tienes una lista de entradas

my_list = [100,200,300]
  1. "-".join(str(n) for n in my_list)
  2. "-".join([str(n) for n in my_list])
  3. "-".join(map(str, my_list))

Sin embargo, como se indica en el ejemplo de timeit en el sitio web de python en https://docs.python.org/2/library/timeit.html, usar un mapa es más rápido. Así que te recomendaría usar"-".join(map(str, my_list))

Thomas Turner
fuente
2

Tu problema es bastante claro. Quizás esté buscando extender, para agregar todos los elementos de otra lista a una lista existente:

>>> x = [1,2]
>>> x.extend([3,4,5])
>>> x
[1, 2, 3, 4, 5]

Si desea convertir enteros en cadenas, use str () o interpolación de cadenas, posiblemente combinado con una comprensión de lista, es decir

>>> x = ['1', '2']
>>> x.extend([str(i) for i in range(3, 6)])
>>> x
['1', '2', '3', '4', '5']

Todo esto se considera pitónico (bueno, una expresión generadora es aún más pitónica, pero sigamos siendo simples y en el tema)

Ivo van der Wijk
fuente
2

Por ejemplo:

lst_points = [[313, 262, 470, 482], [551, 254, 697, 449]]

lst_s_points = [" ".join(map(str, lst)) for lst in lst_points]
print lst_s_points
# ['313 262 470 482', '551 254 697 449']

En cuanto a mí, quiero agregar un strantes de cada lista de str:

# here o means class, other four points means coordinate
print ['0 ' + " ".join(map(str, lst)) for lst in lst_points]
# ['0 313 262 470 482', '0 551 254 697 449']

O lista única:

lst = [313, 262, 470, 482]
lst_str = [str(i) for i in lst]
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

lst_str = map(str, lst)
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482
Jayhello
fuente
1

Tal vez no necesite números como cadenas, solo haga lo siguiente:

functaulu = [munfunc(arg) for arg in range(loppu)]

Más tarde, si lo necesita como cadena, puede hacerlo con cadena o con formato de cadena:

print "Vastaus5 = %s" % functaulu[5]

Tony Veijalainen
fuente
-1

¿Cómo es que a nadie parece gustarle repr?
Python 3.7.2:

>>> int_list = [1, 2, 3, 4, 5]
>>> print(repr(int_list))
[1, 2, 3, 4, 5]
>>> 

Sin embargo, tenga cuidado, es una representación explícita. Un ejemplo muestra:

#Print repr(object) backwards
>>> print(repr(int_list)[::-1])
]5 ,4 ,3 ,2 ,1[
>>> 

Más información en pydocs-repr

Albin Bohlin
fuente