Seite 1 von 1

Werte in Array löschen mit For-Schleife

Verfasst: Montag 17. Dezember 2018, 18:16
von Lennart
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 

Re: Werte in Array löschen mit For-Schleife

Verfasst: Montag 17. Dezember 2018, 18:38
von __blackjack__
@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])

Re: Werte in Array löschen mit For-Schleife

Verfasst: Montag 17. Dezember 2018, 18:52
von Lennart
Ok danke, das werde ich versuchen