Verbinden Sie eine Liste von Elementen mit unterschiedlichen Typen als Zeichenfolge in Python

292

Ich muss mich einer Liste von Elementen anschließen. Viele der Elemente in der Liste sind ganzzahlige Werte, die von einer Funktion zurückgegeben werden. dh

myList.append(munfunc()) 

Wie soll ich das zurückgegebene Ergebnis in eine Zeichenfolge konvertieren, um es mit der Liste zu verbinden?

Muss ich für jeden ganzzahligen Wert Folgendes tun:

myList.append(str(myfunc()))

Gibt es einen pythonischeren Weg, um Casting-Probleme zu lösen?

AKM
quelle
3
Bitte stellen Sie sicher, dass Sie eine gute Grammatik verwenden, damit die Leute verstehen können, was Sie fragen, und / oder Ihre Frage vor dem Posten erneut lesen können.
Allyourcode

Antworten:

535

Das Aufrufen str(...)ist die pythonische Methode, um etwas in eine Zeichenfolge umzuwandeln.

Vielleicht möchten Sie überlegen, warum Sie eine Liste von Zeichenfolgen möchten. Sie können es stattdessen als Liste von Ganzzahlen beibehalten und die Ganzzahlen nur dann in Zeichenfolgen konvertieren, wenn Sie sie anzeigen müssen. Wenn Sie beispielsweise eine Liste von Ganzzahlen haben, können Sie diese einzeln in eine for-Schleife konvertieren und sie verbinden mit ,:

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

Es ist nichts Falsches daran, ganze Zahlen an str zu übergeben. Ein Grund, warum Sie dies möglicherweise nicht tun, ist, dass myList eigentlich eine Liste von Ganzzahlen sein soll, z. B. wäre es sinnvoll, die Werte in der Liste zu summieren. Übergeben Sie in diesem Fall Ihre Ints nicht an str, bevor Sie sie an myList anhängen. Wenn Sie vor dem Anhängen nicht in Zeichenfolgen konvertieren, können Sie eine große Zeichenfolge erstellen, indem Sie Folgendes tun

', '.join(map(str, myList))
allyourcode
quelle
36
Vermutlich ist Englisch nicht seine Muttersprache. Sie sind sich nicht sicher, ob er sich einer Liste von Elementen anschließen möchte, zu denen er viele konvertiert str? Bitte bedenken Sie die Möglichkeit, dass Sie Ihrem Parser etwas Fuzzy-Logik hinzufügen müssen ;-)
John Machin
3
@ John Ich habe darüber nachgedacht, aber wenn er gut Englisch kann, wollte ich ihn sanft dazu bringen, das Englischniveau auf SO auf sein normales Niveau zu bringen. Ich denke, meine Antwort enthält verschiedene Interpretationen und Situationen, in denen er sich möglicherweise befindet.
Allyourcode
41

Die Map-Funktion in Python kann verwendet werden. Es braucht zwei Argumente. Das erste Argument ist die Funktion, die für jedes Element der Liste verwendet werden muss. Das zweite Argument ist das iterable .

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

Nach dem Konvertieren der Liste in eine Zeichenfolge können Sie die einfache Verknüpfungsfunktion verwenden, um die Liste zu einer einzelnen Zeichenfolge zu kombinieren

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

Die obige Methode ist die einfachste und allgemeinste Methode, um eine Liste in einen String umzuwandeln. Eine andere kurze Methode ist:

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

Es gibt drei Möglichkeiten, dies zu tun.

Angenommen, Sie haben eine Liste mit 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))

Wie im Beispiel von timeit auf der Python-Website unter https://docs.python.org/2/library/timeit.html angegeben, ist die Verwendung einer Karte jedoch schneller. Daher würde ich Ihnen die Verwendung empfehlen"-".join(map(str, my_list))

Thomas Turner
quelle
2

Ihr Problem ist ziemlich klar. Vielleicht möchten Sie erweitern, um alle Elemente einer anderen Liste zu einer vorhandenen Liste hinzuzufügen:

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

Wenn Sie Ganzzahlen in Zeichenfolgen konvertieren möchten, verwenden Sie str () oder Zeichenfolgeninterpolation, möglicherweise kombiniert mit einem Listenverständnis, d. H.

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

All dies wird als pythonisch betrachtet (ok, ein Generatorausdruck ist noch pythonischer, aber bleiben wir einfach und thematisch)

Ivo van der Wijk
quelle
2

Beispielsweise:

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

Ich möchte strvor jeder Str-Liste eine hinzufügen :

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

Oder einzelne Liste:

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
quelle
1

Vielleicht brauchen Sie keine Zahlen als Zeichenfolgen, tun Sie einfach:

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

Wenn Sie es später als Zeichenfolge benötigen, können Sie es mit Zeichenfolge oder mit Formatzeichenfolge tun:

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

Tony Veijalainen
quelle
-1

Wie kommt es, dass niemand zu mögen scheint repr?
Python 3.7.2:

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

Pass aber auf, es ist eine explizite Darstellung. Ein Beispiel zeigt:

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

Weitere Infos unter pydocs-repr

Albin Bohlin
quelle