Seite 1 von 1

Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 12:20
von Eneri_Gnats
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

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 13:12
von Saptah
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")

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 14:11
von __blackjack__
@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']

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 16:03
von Eneri_Gnats
ja genau das ist was ich gesucht habe. Danke Danke @blackjack

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 16:07
von Eneri_Gnats
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

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 16:33
von Saptah
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")

Re: Werte aus Array zu string & in neuer Liste

Verfasst: Samstag 4. April 2020, 18:20
von __blackjack__
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']