web-dev-qa-db-fra.com

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

Je dois rejoindre une liste d'éléments. La plupart des éléments de la liste sont des valeurs entières renvoyées par une fonction. c'est à dire:

myList.append(munfunc()) 

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

Dois-je effectuer les opérations suivantes pour chaque valeur entière:

myList.append(str(myfunc()) 

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

239
AKM

L'appel de str(...) est le moyen utilisé par Pythonic pour convertir quelque chose en chaîne.

Vous voudrez peut-être examiner pourquoi vous voulez une liste de chaînes. Vous pouvez plutôt la conserver sous forme de liste d'entiers et ne convertir les entiers en chaînes que lorsque vous avez besoin de les afficher. Par exemple, si vous avez une liste d'entiers, vous pouvez le faire:

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

Je ne suis pas vraiment sûr de ce que vous entendez par "rejoindre", parce que la grammaire que vous utilisez dans votre question est assez mauvaise, mais si je comprends bien votre question, il n'y a rien de mal à passer des entiers à str. Une des raisons pour lesquelles vous ne le feriez peut-être pas est que myList est vraiment censé être une liste d'entiers, par exemple. il serait raisonnable de faire la somme des valeurs de la liste. Dans ce cas, ne transmettez pas votre ints à str avant de les ajouter à myList. Si vous ne convertissez pas en chaînes avant d’ajouter, vous pouvez construire une grande chaîne en effectuant quelque chose comme:

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

la fonction map dans python peut être utilisée. Il faut deux arguments. Le premier argument est le fonction qui doit être utilisé pour chaque élément de la liste. Le deuxième argument est le iterable.

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

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

a = map(str, a)    
''.join(a)      
'123'
32
Prakash N
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
9
Prateek Verma

Il y a trois façons de faire cela.

disons que vous avez une liste d'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))

Toutefois, comme indiqué dans l'exemple de timeit sur python, le site Web à l'adresse 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))

3
Thomas Turner

Votre problème est plutôt clair. Peut-être recherchez-vous l'extension 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 souhaitez convertir des entiers en chaînes, utilisez str () ou une interpolation de chaîne, éventuellement en combinaison avec une liste de compréhension, 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 Pythonic (ok, une expression de générateur est encore plus Pythonic mais restons simples et sur le sujet)

2
Ivo van der Wijk

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 str avant 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
Jayhello

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

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

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

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

1
Tony Veijalainen

Comment se fait-il que 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'infos sur pydocs-repr

0
Albin Bohlin