Unisci un elenco di elementi con tipi diversi come stringa in Python


292

Ho bisogno di unirmi a un elenco di elementi. Molti degli elementi nell'elenco sono valori interi restituiti da una funzione; vale a dire,

myList.append(munfunc()) 

Come devo convertire il risultato restituito in una stringa per unirlo con l'elenco?

Devo fare quanto segue per ogni valore intero:

myList.append(str(myfunc()))

Esiste un modo più Pythonic per risolvere i problemi di casting?


3
Assicurati di usare una buona grammatica in modo che le persone possano capire cosa stai chiedendo e / o rileggere la tua domanda prima di pubblicare.
codice alleato

Risposte:


537

La chiamata str(...)è il modo Pythonic per convertire qualcosa in una stringa.

Potresti voler considerare perché vuoi un elenco di stringhe. È possibile invece tenerlo come un elenco di numeri interi e convertirli in stringhe solo quando è necessario visualizzarli. Ad esempio, se si dispone di un elenco di numeri interi, è possibile convertirli uno per uno in un ciclo for e unirli con ,:

print(','.join(str(x) for x in list_of_ints))

175

Non c'è niente di sbagliato nel passare numeri interi a str. Uno dei motivi per cui potresti non farlo è che myList dovrebbe davvero essere un elenco di numeri interi, ad esempio sarebbe ragionevole sommare i valori nell'elenco. In tal caso, non passare i tuoi ints a str prima di aggiungerli a myList. Se finisci per non convertirti in stringhe prima di aggiungere, puoi costruire una grande stringa facendo qualcosa di simile

', '.join(map(str, myList))

36
Presumibilmente l'inglese non è la sua lingua madre. Non sei sicuro del suo desiderio di entrare in un elenco di elementi in cui molti sta convertendo str? Si prega di considerare la possibilità che sia necessario aggiungere un po 'di logica fuzzy al proprio parser ;-)
John Machin,

3
@John Ho pensato che, ma se è bravo in inglese, volevo spingerlo delicatamente per portare il livello di inglese su SO al suo livello normale. Penso che la mia risposta abbia varie interpretazioni e situazioni in cui potrebbe trovarsi.
allyourcode

41

è possibile utilizzare la funzione mappa in Python. Ci vogliono due argomenti. Il primo argomento è la funzione che deve essere utilizzata per ciascun elemento dell'elenco. Il secondo argomento è l' iterabile .

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

Dopo aver convertito l'elenco in stringa è possibile utilizzare la semplice funzione join per combinare l'elenco in una singola stringa

a = map(str, a)    
''.join(a)      
'123'

10
a=[1,2,3]
b=[str(x) for x in a]
print b

il metodo sopra è il modo più semplice e generale per convertire l'elenco in stringa. un altro metodo breve è-

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

4

Esistono tre modi per farlo.

diciamo che hai un elenco di ints

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))

Tuttavia, come indicato nell'esempio di timeit sul sito Web di Python all'indirizzo https://docs.python.org/2/library/timeit.html, l' utilizzo di una mappa è più veloce. Quindi ti consiglio di usare"-".join(map(str, my_list))


2

Il tuo problema è piuttosto chiaro. Forse stai cercando di estendere, per aggiungere tutti gli elementi di un altro elenco a un elenco esistente:

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

Se si desidera convertire numeri interi in stringhe, utilizzare str () o l'interpolazione di stringhe, possibilmente combinata con una comprensione dell'elenco, ovvero

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

Tutto questo è considerato pitonico (ok, un'espressione del generatore è ancora più pitonica ma restiamo semplici e in tema)


2

Per esempio:

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']

Quanto a me, voglio aggiungere un strprima di ogni lista 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 singolo elenco:

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

1

Forse non hai bisogno di numeri come stringhe, fai semplicemente:

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

In seguito, se necessario, come stringa, è possibile farlo con stringa o con stringa formato:

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


-1

Come mai nessuno sembra piacere repr?
python 3.7.2:

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

Attenzione però, è una rappresentazione esplicita. Un esempio mostra:

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

maggiori informazioni su pydocs-repr

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.