Seite 1 von 1
binary Suche
Verfasst: Sonntag 8. Januar 2023, 18:17
von Ramset
Hallo @ all!
Folgendes Problem, was mich schon länger Wurmt..
Beispiel:
Ich habe eine Liste, die eine lange Zeichenfolge im Binärcode enthält.
list = ['100111101100000010001000111101101101110011100110111111101110000011111111101100000010001000111101101101110011100110111111101110000011']
..........|__________1. Schlüssel__________________|
.................|__________2. Schlüssel__________________|
....................usw...
gesucht werden alle Möglichkeiten zB.: in 32-bit längnen, die sich aus dieser Liste ergeben und immer mit "1" starten.
Wie gebe ich den String vor, Start mit '1' und länge = 32?
Die "find" Funktion hilft hier nicht weiter..
y.find('1') !=......
print(y[:32]), damit wird mir nur die Erste in der Liste vorkommende Zeichenfolge ausgegeben..
Ich hoffe, ihr könnt mir helfen

Grüße!
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 18:56
von sparrow
Was kennt denn .find() noch so für Argumente?
Und warum wird in einem Beispiel eigentlich nicht der erste Schlüssel ab dem ersten Zeichen gefunden?
und warum der zweite nicht ab dem 4. Zeichen?
Alternativ kannst du dir selbst natürlich jedes Zeichen anschauen und bei Übereinstimmung den Substring bilden.
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 19:33
von Ramset
es wird mit "find" nur der erste Schlüssel gefunden/ausgegeben... geau das ist das problem

die Argumente in find(value, start, end) bringen nichts...
jedes Zeichen anschauen wäre bei einer kleinen Liste sicher kein Problem, aber bei einer Länge von tausenden Zeichen, etwas aufwändig ^^
deshalb die Suche nach einer Lösung...
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 19:45
von sparrow
Was denkst du denn, was find macht? Nicht die tausenden Zeichen durchsuchen?
Und warum bringen denn die Argumente nichts? "start" drängt sich hier doch sehr auf.
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 19:49
von Ramset
teste es selber...
list1 = "11001000110010001100110110010001100100011000110011000101100010001101111001000110010001100110110010001100100011000110011000"
y = "".join(list1)
for n in range(len(list1)):
y.find('1', n)
print(y[:32], len(list1))
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 19:50
von noisefloor
Hallo,
man kann collections.deque nutzen und ein "Fenster" mit 32 Zeichen Länge über den String laufen lassen:
Code: Alles auswählen
from collections import deque
data = ['100111101100000010001000111101101101110011100110111111101110000011111111101100000010001000111101101101110011100110111111101110000011']
d = deque(maxlen=32)
for digit in data[0]:
d.append(digit)
if len(d) == 32 and d[0] == '1':
print(f'found: {"".join(d)}')
Gruß, noisefloor
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 19:52
von Ramset
Hey noisefloor!
WOW..!! 1000 Dank, das ist die Lösung

Super, Klasse!!!

Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 20:09
von Sirius3
@Ramset: Du hast doch gar nicht versucht herauszufinden, wie man das start-Argument von find benutzt. Hier fertige Lösungen abzugreifen wird Dich nicht sehr weit bringen.
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 20:31
von Ramset
@ Sirius3: ich habe lange mit find() experimentiert, hat nicht funktioniert... die Lösung von noisefloor arbeitet so, wie es funktionieren soll... also bin ich sehr dankbar für die schnelle Hilfe und sehr zufrieden damit

Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 21:02
von Sirius3
Dann wäre es ja ein Möglichkeit, hier zu zeigen, wie Du versucht hast, find zu benutzen, damit wir konkret helfen können.
Re: binary Suche
Verfasst: Sonntag 8. Januar 2023, 21:58
von Ramset
Der Code von noisefloor ist in mein Prog eingebunden und tut, was er tun soll, somit ist der Fall abgeschlossen und ich bedanke mich für eure Hilfe!! Thumbs Up!!