Risposte:
In Python 2:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
In Python 3 (dove print
è una funzione incorporata e non più una funzionalità di sintassi):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
Entrambi restituiscono:
[x, 3, b]
Questo sta usando la map()
funzione per chiamare str per ogni elemento di mylist , creando un nuovo elenco di stringhe che viene poi unito in una stringa con str.join()
. Quindi, l' %
operatore di formattazione della stringa sostituisce la stringa in anziché %s
in "[%s]"
.
map
funzione per chiamare str
ogni elemento di mylist
, creando un nuovo elenco di stringhe con cui poi si unisce in una stringa str.join
. Quindi, utilizza l' %
operatore di formattazione della stringa per sostituire la stringa in anziché %s
in "[%s]"
.
"[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(o imap
in python2.x) a (f(x) for x in xs)
quando f
è un chiamabile predefinito; che tende a eseguire meno bytecode e di solito è più compatto. Certamente non è map(lambda x:..., xs)
molto peggio di(... for x in xs)
Questo è un codice semplice, quindi se sei nuovo dovresti capirlo abbastanza facilmente.
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
Li stampa tutti senza virgolette, come volevi.
Se stai usando Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
Invece di utilizzare map
, consiglierei di utilizzare un'espressione del generatore con la capacità di join
accettare un iteratore:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
Ecco join
una funzione membro della classe string str
. Richiede un argomento: un elenco (o iteratore) di stringhe, quindi restituisce una nuova stringa con tutti gli elementi concatenati da, in questo caso ,
,.
", ".join( str(x) for x in list_or_iterator).join('[]')
È possibile eliminare tutti i caratteri indesiderati da una stringa utilizzando il suo translate()
metodo con None
come table
argomento seguito da una stringa contenente i caratteri che si desidera rimuovere per il suo deletechars
argomento.
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
Se stai usando una versione di Python precedente alla 2.6, dovrai invece usare la funzione string
del modulo translate()
perché la possibilità di passare None
come table
argomento non è stata aggiunta fino a Python 2.6. Usandolo assomiglia a questo:
import string
print string.translate(str(lst), None, "'")
L'uso della string.translate()
funzione funzionerà anche nella versione 2.6+, quindi potrebbe essere preferibile utilizzarla.
lst = ["it isn't", 3, 'b']
==> ["it isnt", 3, b]
e anche conlst = ['it isn\'t', 3, 'b']
Ecco una sessione interattiva che mostra alcuni passaggi nell'unica riga di @ TokenMacGuy. Per prima cosa usa la map
funzione per convertire ogni elemento nell'elenco in una stringa (in realtà, sta creando un nuovo elenco, non convertendo gli elementi nel vecchio elenco). Quindi sta usando il metodo delle stringhe join
per combinare quelle stringhe ', '
tra di loro. Il resto è solo la formattazione delle stringhe, che è piuttosto semplice. (Modifica: questa istanza è semplice; la formattazione delle stringhe in generale può essere piuttosto complessa.)
Si noti che l'uso join
è un modo semplice ed efficiente per costruire una stringa da diverse sottostringhe, molto più efficiente rispetto a farlo aggiungendo successivamente stringhe alle stringhe, il che comporta molte copie dietro le quinte.
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
Usando .format
per la formattazione delle stringhe,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
Produzione:
[x, 3, b]
Spiegazione:
map
viene utilizzato per mappare ogni elemento dell'elenco al string
tipo.,
separatore.[
e ]
nell'istruzione print per mostrare le parentesi graffe dell'elenco.Riferimento:
.format
per la formattazione delle stringhe PEP-3101
.format
il modo più pitonico. Ma, ovviamente, accetto i disaccordi. ;)
Sono stato ispirato da @AniMenon a scrivere una soluzione pitonica più generale.
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
Utilizza solo il format
metodo. Nessuna traccia str
e consente la regolazione fine del formato degli elementi. Ad esempio, se hai numeri in virgola mobile come elementi dell'elenco, puoi regolare il loro formato, aggiungendo uno specificatore di conversione, in questo caso:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
L'output è abbastanza decente:
[1.85, -6.33, 4000.21]
print(["Sam"])
chiamarepr("Sam")
, che ritorna'Sam'
(con le virgolette), a differenza di quando chiamiprint("Sam")
e Python chiamastr("Sam")
che ritornaSam
(senza virgolette). Vedi la differenza trastr
erepr
o Pythonstr
elist
s per maggiori informazioni.