2016-06-03 23 views
0

Ich habe eine Datenbank, die aus etwa 800 16-Nummern-Sequenzen besteht. Die Sequenzen sind eine einzigartige Kombination von Einsen und Nullen. Es gibt einen Prozess, der 15 der Zahlen in der Sequenz ausgibt, und ich möchte durch die Datenbank (historische Daten) schauen und alle Spiele finden, die die letzte Zahl ausschließen. Ich habe angefangen, eine Liste von Unterlisten zu verwenden. Ich habe einen Code angepasst, den ich in einer anderen Frage gefunden habe, aber er funktioniert nicht vollständig für meine Anwendung. Der Code ist:Überprüfen, ob eine Liste mit einer Unterliste innerhalb einer Liste nach Index übereinstimmt

T = [0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] 
joined_T_Search = int(''.join(map(str,T_vein))) 
joined_T_Search = str(joined_T_Search) 
match_T = [] #empty list to append closest match to 
#Match search algorithm 
for text in data: 
    if joined_T_Search in text: 
     match_T.append(text) 
#grabs last digit to indicate hit/miss 
filter_output_T = match_T[0][15] #grabs last digit within sublist 
print match_T 
print len(match_T) #indicates if multiple results show up 

Es funktioniert gut, die meiste Zeit, aber es gibt manchmal so etwas wie dieses:

[0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] #input 
['0001000010000000', '1000010000000100', '0000100001000000', '0101000010000000', '0110100001000000', '0100001000000000', '1000010000000010', '1000010000000001', '1000100001000000', '1000010000001010', '0000100001000000', '0001000010000000', '0001000010000000', '0101100001000000', '1110000100000000', '0100100001000000', '0110000100000000', '1000010000000000'] #output 

Was ich will (was es manchmal ist, wenn mehrere ähnliche Kombinationen) ist dies:

[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0] #input 
['1000001000100000', '1000001000100001', '1000001000100001', '1000001000100001'] #output 

Letztendlich wird diese letzte Ziffer verwendet, um eine Entscheidung zu treffen, so dass ich den Index kennen muss. Im Fall der ersten 15 übereinstimmenden und sagen wir 3 Nullen und 2 als die 16. Nummer, möchte ich die häufigste Nummer wählen. Diese Nummer könnte an eine Liste oder ähnliche Methode angehängt werden. Es ist wichtig, dass die Reihenfolge der Nummern gleich bleibt.

Ich denke, dass ein numpy 2D-Array eine bessere Option als eine Liste von Liste für eine Vielzahl von Gründen ist, aber ich bin mir nicht sicher, wie dies zu implementieren.

Ich habe erst seit ein paar Monaten in Python programmiert, also fange ich gerade an, den Dreh raus zu bekommen. Ich habe einen Maschinenbau-Abschluss, also bin ich mit der Programmierung vertraut, bin aber keineswegs ein Programmierer. Danke für die Hilfe!

+0

Ist die Eingabe immer 15 Zeichen und die Ausgaben immer 16 Zeichen? –

+0

Ja, der Eingang ist immer 15 und der Ausgang 16. – paperstsoap

Antwort

0

Wenn ich Ihr Problem richtig verstehen, würde ich folgende tun:

T = [0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] 
joined_T_Search = ''.join(map(str,T)) 
match_T = [] #empty list to append closest match to 

#Match search algorithm 
for text in data: 
    if joined_T_Search == text[:-1]: 
     match_T.append(text[-1]) 
print match_T 

if len(match_T) == 0: 
    # Do something (nothing matched the input) 
else: 
    # Find the max of the last element 
    print max(set(match_T), key=match_T.count) 

Dies setzt voraus, dass Sie nur wirklich kümmern sich um die letzte Ziffer, die am häufigsten auftritt. Es ist im Wesentlichen, was Sie getan haben, aber ich speichere nur die letzte Ziffer und finde dann die maximale Anzahl dieser Menge.

+0

Nach einem kurzen Test scheint dies korrekt zu funktionieren. Ich werde dies in mein Programm implementieren und es über mehrere Szenarien hinweg überprüfen. Ich werde so bald wie möglich zurückkommen. Danke @ Jenner Felton – paperstsoap

+0

@paperstsoap Wenn die Lösung für Sie funktioniert, akzeptieren Sie sie bitte als die richtige Lösung, indem Sie auf das Häkchen auf der linken Seite klicken. –

+0

Ich lief es über 20 Fälle. Es funktionierte in jedem Fall perfekt, außer wenn es einen Fall mit der gleichen Anzahl von Ergebnissen gab (wie eine der Sequenzen, die mit einer 1 enden und eine, die mit einer 0 endet. Dies geschah einmal aus den 20 Fällen. Ich erwarte es nicht Dies geschieht oft, aber aus Gründen der Vollständigkeit sollte es wahrscheinlich in die eine oder andere Richtung gehen – paperstsoap

Verwandte Themen