Werte in Array löschen mit For-Schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Hallo!

Mein Ziel ist es, einen bestimmten Wert in einem Array zu finden und alles, was vor dem Wert kommt, zu löschen.

Wo liegt mein Fehler? :?

Code: Alles auswählen

import numpy as np

x = np.array([0,0,0,10,3, 9,7])
y = np.array([0,0,0,1,5,2,8])
z = np.array([0,0,0,8,7,3,2])

value = 10
idx = (np.abs(x-value)).argmin()
print(idx)
print(x[idx])

for i in range(0, idx):
del(x[i])
print(x)
Fehlercode:

Code: Alles auswählen

IndentationError: expected an indented block 
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lennart: Einrückung ist in Python wichtig. Was gehört denn Deiner Meinung nach zu der ``for``-Schleife? Nur das ``del`` oder auch das `print()`? Woher weisst *Du* das? Und woher soll *Python* das wissen?

Das ist aber auch von der Idee her kaputt, denn das löscht *nicht* die ersten `idx` Elemente. Im ersten Durchlauf der Schleife würde das erste Element gelöscht, und alle weiteren Rücken eins nach vorne. Im zweiten Durchlauf wird dann aber nicht das ursprünglich zweite Element gelöscht, denn an der zweiten Stelle steht ja nun das ursprünglich dritte Element.

Die Elemente einzeln vorne aus einer Sequenz zu löschen dürfte bei den meisten Sequenztypen auch sehr ineffizient sein. Und bei Numpy-Arrays geht das *gar nicht* weil sich deren Grösse nicht verändern kann:

Code: Alles auswählen

In [3]: del np.arange(0, 10)[0]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-ed59e3b882a4> in <module>()
----> 1 del np.arange(0, 10)[0]

ValueError: cannot delete array elements
Du könntest/müsstest ein neues Array erstellen, aus den Elementen, die Du behalten möchtest. Das geht am einfachsten mit der Slicing-Syntax:

Code: Alles auswählen

In [4]: np.arange(0, 10)[5:]
Out[4]: array([5, 6, 7, 8, 9])
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Ok danke, das werde ich versuchen
Antworten