Python: Prüfen ob Wert in Liste bereits existiert?


01.03.2021, 19:06

Es muss doch eine Möglichkeit geben oder? Kann mir irgendjemand helfen?


01.03.2021, 19:09

PS: Wenn ihr mir sagt wie das geht bitte auch Code posten. Sonst weiß ich nicht wie ich das machen kann weil ich erst seit kurzer Zeit mit Python arbeite.


02.03.2021, 10:10

Viele schreiben mir wie ich das machen könnte. Aber leider verstehe ich davon nicht viel weil ich neu in Python bin. Beispielcode? Wie funktionieren diese Dictionarys? Wie muss ich sie benutzen?


03.03.2021, 11:16

Langsam verzweifel ich. Ich kann schon seit 3 Tagen nicht mehr an meinem Projekt arbeiten

7 Antworten

Selbst wenn es dafür eine Funktion gäbe, wäre es nicht unbedingt zielführend. Verwende doch die Zahl als Key und nicht im Wert. Dann werden gleiche Schlüssel auch mit neuen Werten überschrieben.

name123454321 
Fragesteller
 28.02.2021, 19:43

Und wie kann ich das machen?

0

Iteriere über die Liste und prüfe ob das gesuchte Teil des Objektes ist. Sinnvoller wäre die Nutzung eines Dictionaries.

name123454321 
Fragesteller
 01.03.2021, 21:52

Und wie mache ich das?

0

list=["20 hi", "30 hi", "40 hi", "20 bye"]

zahlenwerte=[]

for item in list:

if item[0:1] in zahlenwerte:

zahlenwerte.append(item[0:1])

else:

list.remove(item)

#Man erstellt eine zweite Liste nur mit den Zahlenwerten, funktioniert aber leider nur, wenn alle Zahlen zweistellig sind und am Anfang kommen

name123454321 
Fragesteller
 03.03.2021, 11:14

Leider kann die Zahl auch nur eine, zwei, drei usw Stellen haben.

0
DDaniel925  03.03.2021, 11:34
@name123454321

list=["5 hi", "15 hi", "45 hi", "150 hi", "69 hi", "45 bye"]

zahlenwerte=[]

for item in list:

   zahlenwert=""

   counter=0

   for char in item:

       try:

           int(char)

           counter+=1

       except:

           continue

   if int(item[0:counter]) in zahlenwerte:

       list.remove(item)

   zahlenwerte.append(int(item[0:counter]))

print(list)

1
name123454321 
Fragesteller
 03.03.2021, 18:02
@DDaniel925

Ok, habe ich geschrieben. Aber wenn jezt noch einmal eine Zahl dazukommt die schon da war, crasht es mit folgender Meldung:

TypeError: descriptor 'remove' for 'list' objects doesn't apply to a 'str' object
0
name123454321 
Fragesteller
 03.03.2021, 18:04
@DDaniel925

Jezt kommt dieser Fehler:

ValueError: list.remove(x): x not in list
0
DDaniel925  04.03.2021, 14:20
@name123454321

Hmmm... Wenn man schreibt: for x in list: list.remove(x) sollte x in der Liste sein, wenn man es nicht davor verändert. Ich kann dir leider nicht helfen, bei mir funktioniert es.

0

Würdest du die Anfangszahlen in ein Dictionary einsortieren würdest du dir das Leben viel einfacher machen, weil halt ein Schlüssel in einem dict nur ein mal vorkommen kann.

Wenn du darauf bestehst das es als String genau so in einer list sein soll müsstest du durch die list iterieren und bei jedem String überprüfen ob die Zahl am Anfang bereits erwähnt wurde.

Um diese Zahl aus dem String zu extrahieren, kommt darauf an, ob du voraussetzt das nach der Zahl ein Lehrzeichen kommt oder ob du alle Digits am Anfang herausholen willst. Das letztere wäre mit RegEx recht effektiv umsetzbar. Das erstere mit einem String.split

Um zu überprüfen ob die Zahl erwähnt wurde könntest du eine weitere Liste machen wo du jede Zahl einfügst und dann prüfst ob sie schon vorkommt.

Ich werde dir das nicht vorschreiben.

NachtAktiv697  03.03.2021, 11:09

Er hat folgendes geschrieben:

PS: Wenn ihr mir sagt wie das geht bitte auch Code posten. Sonst weiß ich nicht wie ich das machen kann weil ich erst seit kurzer Zeit mit Python arbeite.
1
name123454321 
Fragesteller
 03.03.2021, 11:17
@Klawutzel

Wie kann ich den jede Anfangszahl in dieses Dictionary einsortieren?

0

Du solltest beim Einfügen prüfen, dass der Wert überschrieben wird, wenn der jeweilige Schlüssel bereits enthalten ist. Eine mögliche Implementierung könnte so aussehen:

def extract_key_value(entry):
	idx = 0
	alphabet = [str(k) for k in range(10)]
	while entry[idx] in alphabet:
		idx += 1
	if idx < 1:
		raise ValueError('Invalid format.')
	return entry[:idx], entry[idx:].lstrip()


def add_entry(data, new_entry):
	key, val = extract_key_value(new_entry)
	candidates = [idx for idx, entry in enumerate(data) if extract_key_value(entry)[0] == key]
	if len(candidates):
		data[min(candidates)] = new_entry
	else:
		data.append(new_entry)


def main():
	data = ['10 Test 3', '20 Test 2', '30 Test 3']
	print(data)
	new_entry = '20 Hallo!'
	add_entry(data, new_entry)
	print(data)


if __name__ == '__main__':
	main()