Werte aus Array zu string & in neuer Liste

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

Hallo Zusammen,

ich habe eine Frage zu der Erstellung von einem String aus Integer aus verschiedenen Positionen in einem Array.
Ich habe ein Array in dem in der 1 und 2 Spalte Zahlen stehen, die einen Start und Endpunkt wiedergeben. Ich möchte in eine neuen Liste eine Spalte haben in der dann als string steht: [1-2, 2-3, 5-6....] das Minus zwischen den Zahlen muss auch iwie eingefügt werden.
Array:

Code: Alles auswählen

 ppc['br'] = array([
#        from  to       
        [  1,  71,    ...], 
        [  2,  72,    ...] ])
       
       neue_Liste = ['1-71', '2-72']
        
Ich hoffe mir kann jemand weiter helfen.

Viele Grüße
Saptah
User
Beiträge: 4
Registriert: Samstag 4. April 2020, 12:17

Hallo,

ich habe mal auf die schnelle ein Minimalbeispiel geschrieben, was dir weiterhelfen könnte.
Bei ungeraden Array-Längen, wird das letzte Element ignoriert, wenn dies nicht gewünscht ist, müsste für ungerade Arrays der "Sonderfall" explizit definiert werden:

Code: Alles auswählen

import numpy as np
a=np.array([[1,2,3,4],[4,5,6,8]])

neue_liste=[]

for i in a:
    for j in range(0,len(i),2):
        
        if j<len(i)-1:
            w1=i[j]
            w2=i[j+1]
            str1=str(w1)+"-"+str(w2)
            neue_liste.append(str1)


print(neue_liste)
print(a)
print("ENDE")
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Saptah: Ich denke Du hast die Frage falsch verstanden. Bei Deinem Beispiel müsste ["1-2", "4-5"] als Ergebnis kommen. Die Start/End-Werte stehen in den ersten beiden Spalten. Die restlichen Spalten sind egal.

`str()` und ``+`` um Zeichenketten mit Werten zusammenstückeln ist auch eher BASIC als Python. Und kryptische Namen und dann auch noch mit Nummern sind nicht gut.

Die Lösung ist viel einfacher: die beiden ersten Spalten nehmen und in einer „list comprehension“ Start- und Endwerte in Zeichenketten formatieren:

Code: Alles auswählen

In [356]: a                                                                     
Out[356]: 
array([[1, 2, 3, 4],
       [4, 5, 6, 8]])

In [357]: [f"{start}-{end}" for start, end in a[:, :2]]                         
Out[357]: ['1-2', '4-5']
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

ja genau das ist was ich gesucht habe. Danke Danke @blackjack
Eneri_Gnats
User
Beiträge: 20
Registriert: Freitag 14. Februar 2020, 11:17

ich frage mich gerade nur warum die Zahlen mit einer Nachkommastelle angegeben sind obwohl dass in meinem array nicht so ist. Der String wird zu 1.0-4.0 statt 1-4
Saptah
User
Beiträge: 4
Registriert: Samstag 4. April 2020, 12:17

Eneri_Gnats hat geschrieben: Samstag 4. April 2020, 16:07 ich frage mich gerade nur warum die Zahlen mit einer Nachkommastelle angegeben sind obwohl dass in meinem array nicht so ist. Der String wird zu 1.0-4.0 statt 1-4
Da wird der Datentyp "float" statt "int" sein.

Wenn a dein ursprüngliches Array ist, gibt mal folgendes ein:

Code: Alles auswählen

print(a.dtype)
Wenn die Ausgabe "float32" ist, dann probiere mal den Typ auf "int64" zu ändern:

Code: Alles auswählen

a.astype("int64")
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Alternativ kann man beim Formatieren sagen, dass keine Nachkommastellen gewünscht sind:

Code: Alles auswählen

In [365]: a                                                                     
Out[365]: 
array([[1., 2., 3., 4.],
       [4., 5., 6., 8.]])

In [366]: [f"{start:.0f}-{end:.0f}" for start, end in a[:, :2]]                 
Out[366]: ['1-2', '4-5']
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten