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?


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

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

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'

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

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


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)


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

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]


-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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.