Rejoignez une liste d'éléments avec différents types sous forme de chaîne en Python

292

Je dois joindre une liste d'articles. De nombreux éléments de la liste sont des valeurs entières renvoyées par une fonction; c'est à dire,

myList.append(munfunc()) 

Comment dois-je convertir le résultat retourné en une chaîne afin de le joindre à la liste?

Dois-je faire ce qui suit pour chaque valeur entière:

myList.append(str(myfunc()))

Existe-t-il un moyen plus Pythonique pour résoudre les problèmes de casting?

AKM
la source
3
Veuillez vous assurer d'utiliser une bonne grammaire pour que les gens puissent comprendre ce que vous demandez et / ou relire votre question avant de poster.
allyourcode

Réponses:

537

L'appel str(...)est la façon Pythonique de convertir quelque chose en chaîne.

Vous voudrez peut-être vous demander pourquoi vous voulez une liste de chaînes. Vous pouvez à la place le conserver sous forme de liste d'entiers et convertir uniquement les entiers en chaînes lorsque vous devez les afficher. Par exemple, si vous avez une liste d'entiers, vous pouvez les convertir un par un dans une boucle for et les joindre avec ,:

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

Il n'y a rien de mal à passer des entiers à str. Une des raisons pour lesquelles vous pourriez ne pas le faire est que myList est vraiment censé être une liste d'entiers, par exemple, il serait raisonnable de additionner les valeurs dans la liste. Dans ce cas, ne transmettez pas vos entrées à str avant de les ajouter à myList. Si vous finissez par ne pas convertir en chaînes avant d'ajouter, vous pouvez construire une grande chaîne en faisant quelque chose comme

', '.join(map(str, myList))
allyourcode
la source
36
Vraisemblablement, l'anglais n'est pas sa langue maternelle. Vous n'êtes pas sûr de son souhait de rejoindre une liste d'éléments dont beaucoup sont en train de se convertir str? Veuillez considérer la possibilité que vous ayez besoin d'ajouter de la logique floue à votre analyseur ;-)
John Machin
3
@John J'ai pensé à ça, mais s'il est bon en anglais, je voulais le pousser doucement pour amener le niveau d'anglais sur SO à son niveau normal. Je pense que ma réponse
nourrit
41

la fonction de carte en python peut être utilisée. Cela prend deux arguments. Le premier argument est la fonction qui doit être utilisée pour chaque élément de la liste. Le deuxième argument est l' itérable .

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

Après avoir converti la liste en chaîne, vous pouvez utiliser la fonction de jointure simple pour combiner la liste en une seule chaîne

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

La méthode ci-dessus est le moyen le plus simple et le plus général de convertir une liste en chaîne. une autre méthode courte est-

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

Il y a trois façons de procéder.

disons que vous avez une liste de points

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

Cependant, comme indiqué dans l'exemple de timeit sur le site Web python à https://docs.python.org/2/library/timeit.html, l' utilisation d'une carte est plus rapide. Je vous recommande donc d'utiliser"-".join(map(str, my_list))

Thomas Turner
la source
2

Votre problème est plutôt clair. Vous cherchez peut-être à étendre, pour ajouter tous les éléments d'une autre liste à une liste existante:

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

Si vous voulez convertir des entiers en chaînes, utilisez str () ou une interpolation de chaîne, éventuellement combinée avec une compréhension de liste, c.-à-d.

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

Tout cela est considéré comme pythonique (ok, une expression de générateur est encore plus pythonique mais restons simples et sur le sujet)

Ivo van der Wijk
la source
2

Par exemple:

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

Quant à moi, je veux ajouter un stravant chaque liste 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']

Ou liste unique:

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
la source
1

Peut-être que vous n'avez pas besoin de nombres comme chaînes, faites simplement:

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

Plus tard, si vous en avez besoin en tant que chaîne, vous pouvez le faire avec une chaîne ou avec une chaîne de format:

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

Tony Veijalainen
la source
-1

Pourquoi personne ne semble aimer repr?
python 3.7.2:

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

Attention cependant, c'est une représentation explicite. Un exemple montre:

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

plus d'informations sur pydocs-repr

Albin Bohlin
la source