Para explicar por qué la lista no se imprime "correctamente", print(["Sam"])llama repr("Sam"), que devuelve 'Sam'(con las comillas), a diferencia de cuando llamas print("Sam")y Python llama str("Sam")que devuelve Sam(sin las comillas). Ver diferencia entre stryrepr o Python stry lists para obtener más información.
Esto está usando la map()función para llamar a str para cada elemento de mylist , creando una nueva lista de cadenas que luego se une en una cadena con str.join(). Luego, el %operador de formato de cadena sustituye la cadena en en lugar de %sen "[%s]".
Gracias, eso funciona muy bien. ¿Puede explicar un poco en detalle qué está haciendo en la segunda línea? Soy nuevo en Python.
Obaid
19
Está usando la mapfunción para llamar stra cada elemento de mylist, creando una nueva lista de cadenas que luego une en una cadena str.join. Luego, usa el %operador de formato de cadena para sustituir la cadena en en lugar de %sen "[%s]".
li.davidm
6
Otra forma de hacerlo que es quizás un poco más moderna: "[{0}]".format(", ".join(str(i) for i in mylist))
Jack O'Connor
2
tiendo a preferir map(f, xs)(o imapen python2.x) sobre (f(x) for x in xs), cuando fes un invocable predefinido; que tiende a ejecutar menos códigos de bytes y suele ser más compacto. Ciertamente, eso nomap(lambda x:..., xs) es mucho peor que(... for x in xs)
SingleNegationElimination
1
@ user1767754: ¿en serio? ¿Enlace?
SingleNegationElimination
18
Este es un código simple, por lo que si es nuevo, debe comprenderlo con bastante facilidad.
mylist =["x",3,"b"]for items in mylist:print(items)
Estoy confundido por esto. ¿El tipo de datos largo está filtrando la lista de alguna manera?
Dval
Una versión más concisa seríaprint(end='['); print(*l, sep=', ', end=']\n')
Anónimo
9
En lugar de usar map, recomendaría usar una expresión generadora con la capacidad de joinaceptar un iterador:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Aquí, joines una función miembro de la clase de cadena str. Toma un argumento: una lista (o iterador) de cadenas, luego devuelve una nueva cadena con todos los elementos concatenados por, en este caso ,,.
Una buena optimización para Python 2, ya que map devuelve una lista en 2.x. Devuelve un generador en 3.x, por lo que no ayuda tanto allí.
Tom Zych
7
Volvería", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem
@eyquem: Inteligente, no había visto unirse de esa manera antes. Aún así, eso es un poco más opaco para un principiante (ya que está usando la propiedad de que una cadena es un contenedor iterable de cadenas de un carácter).
Seth Johnson
6
Puede eliminar todos los caracteres no deseados de una cadena utilizando su translate()método con Nonepara el tableargumento seguido de una cadena que contiene los caracteres que desea eliminar para su deletecharsargumento.
Si está utilizando una versión de Python anterior a la 2.6, deberá usar la función stringdel módulo en su translate()lugar porque la capacidad de pasar Nonecomo tableargumento no se agregó hasta Python 2.6. Usarlo se ve así:
Por desgracia: lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]y también conlst = ['it isn\'t', 3, 'b']
eyquem
1
@eyquem: Sí, evitar la eliminación de caracteres que en realidad son parte de sus datos (en lugar de usarse estrictamente para delimitarlos) naturalmente requeriría una lógica un poco más elaborada / diferente si es una posibilidad.
martineau
3
Aquí hay una sesión interactiva que muestra algunos de los pasos en una sola línea de @ TokenMacGuy. Primero, usa la mapfunción para convertir cada elemento de la lista en una cadena (en realidad, está creando una nueva lista, no convirtiendo los elementos de la lista anterior). Luego está usando el método de cadena joinpara combinar esas cadenas ', 'entre ellas. El resto es solo formato de cadena, que es bastante sencillo. (Editar: esta instancia es sencilla; el formato de cadena en general puede ser algo complejo).
Tenga en cuenta que usar joines una forma simple y eficiente de construir una cadena a partir de varias subcadenas, mucho más eficiente que hacerlo agregando cadenas sucesivamente a las cadenas, lo que implica una gran cantidad de copias detrás de escena.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Solo usa el formatmétodo. Sin rastro de str, y permite el ajuste fino del formato de los elementos. Por ejemplo, si tiene números flotantes como elementos de la lista, puede ajustar su formato agregando un especificador de conversión, en este caso:.2f
print(["Sam"])
llamarepr("Sam")
, que devuelve'Sam'
(con las comillas), a diferencia de cuando llamasprint("Sam")
y Python llamastr("Sam")
que devuelveSam
(sin las comillas). Ver diferencia entrestr
yrepr
o Pythonstr
ylist
s para obtener más información.Respuestas:
En Python 2:
En Python 3 (donde
print
es una función incorporada y ya no una característica de sintaxis):Ambos regresan:
Esto está usando la
map()
función para llamar a str para cada elemento de mylist , creando una nueva lista de cadenas que luego se une en una cadena constr.join()
. Luego, el%
operador de formato de cadena sustituye la cadena en en lugar de%s
en"[%s]"
.fuente
map
función para llamarstr
a cada elemento demylist
, creando una nueva lista de cadenas que luego une en una cadenastr.join
. Luego, usa el%
operador de formato de cadena para sustituir la cadena en en lugar de%s
en"[%s]"
."[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(oimap
en python2.x) sobre(f(x) for x in xs)
, cuandof
es un invocable predefinido; que tiende a ejecutar menos códigos de bytes y suele ser más compacto. Ciertamente, eso nomap(lambda x:..., xs)
es mucho peor que(... for x in xs)
Este es un código simple, por lo que si es nuevo, debe comprenderlo con bastante facilidad.
Los imprime todos sin comillas, como quisiera.
fuente
Usando solo impresión:
fuente
Si está utilizando Python3:
fuente
print(end='['); print(*l, sep=', ', end=']\n')
En lugar de usar
map
, recomendaría usar una expresión generadora con la capacidad dejoin
aceptar un iterador:Aquí,
join
es una función miembro de la clase de cadenastr
. Toma un argumento: una lista (o iterador) de cadenas, luego devuelve una nueva cadena con todos los elementos concatenados por, en este caso,
,.fuente
", ".join( str(x) for x in list_or_iterator).join('[]')
Puede eliminar todos los caracteres no deseados de una cadena utilizando su
translate()
método conNone
para eltable
argumento seguido de una cadena que contiene los caracteres que desea eliminar para sudeletechars
argumento.Si está utilizando una versión de Python anterior a la 2.6, deberá usar la función
string
del módulo en sutranslate()
lugar porque la capacidad de pasarNone
comotable
argumento no se agregó hasta Python 2.6. Usarlo se ve así:El uso de la
string.translate()
función también funcionará en 2.6+, por lo que podría ser preferible usarla.fuente
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
y también conlst = ['it isn\'t', 3, 'b']
Aquí hay una sesión interactiva que muestra algunos de los pasos en una sola línea de @ TokenMacGuy. Primero, usa la
map
función para convertir cada elemento de la lista en una cadena (en realidad, está creando una nueva lista, no convirtiendo los elementos de la lista anterior). Luego está usando el método de cadenajoin
para combinar esas cadenas', '
entre ellas. El resto es solo formato de cadena, que es bastante sencillo. (Editar: esta instancia es sencilla; el formato de cadena en general puede ser algo complejo).Tenga en cuenta que usar
join
es una forma simple y eficiente de construir una cadena a partir de varias subcadenas, mucho más eficiente que hacerlo agregando cadenas sucesivamente a las cadenas, lo que implica una gran cantidad de copias detrás de escena.fuente
Utilizando
.format
para formatear cadenas,Salida:
Explicación:
map
se utiliza para mapear cada elemento de la lista astring
escribir.,
separador.[
y]
en la declaración de impresión para mostrar las llaves de la lista.Referencia:
.format
para formato de cadena PEP-3101fuente
.format
la forma más pitónica. Pero, por supuesto, acepto los desacuerdos. ;)Me inspiré en @AniMenon para escribir una solución pitónica más general.
Solo usa el
format
método. Sin rastro destr
, y permite el ajuste fino del formato de los elementos. Por ejemplo, si tiene números flotantes como elementos de la lista, puede ajustar su formato agregando un especificador de conversión, en este caso:.2f
La salida es bastante decente:
fuente