2016-03-22 14 views
0

zu suchen habe ich ein Tupel, Art der Liste in Python .. die tpple ist wie folgt:Python - Wie ein Tupel

heartbeat_replys = ('0xFF', '0x0F', '0xF0', '0x00', 
       '0xB0', '0x40', '0xBF', '0x4F', 
       '0xE9', '0x19', '0xE6', '0x16') 

ich eine Reihe von 4 Hex-Werte erhalten, die irgendwo in dem Tupel sind. Ich möchte nach der Zeile suchen und dann die nächsten 4 Hex-Werte senden.

zum Beispiel I erhalten '0xff', '0x0f', '0xF0', '0x00' ich die Tupel für die Werte gesucht werden soll, und dann die nächsten 4 Hex-Werte senden .. '0xB0', '0x40', '0xBF', '0x4F' ... aber wenn ich andere Werte erhalten will ich nächste 4 nach denen und so dann schicken Ich weiß, wie man Tupel spaltet und wie man den Index eines Tupels erhält, aber ich weiß nicht, wie man nach einem Tupelwert sucht und dann entlang des Tupels fortschreitet und die nächsten 4 Werte aus dem Tupel ausdruckt oder sendet. danke.

Antwort

0

wie sei es so etwas wie dies

>>> heartbeat_replys = ('0xFF', '0x0F', '0xF0', '0x00', 
       '0xB0', '0x40', '0xBF', '0x4F', 
       '0xE9', '0x19', '0xE6', '0x16') 
>>> def my_fun(msj): 
     hear = map(lambda x:int(x,16),heartbeat_replys) 
     msj = map(lambda x:int(x,16),msj) 
     n = len(msj) 
     for i in range(len(hear)): 
      if msj == hear[i:i+n]: 
       return heartbeat_replys[i+n:i+2*n] 

>>> msj='0xff', '0x0f', '0xF0', '0x00' 
>>> my_fun(msj) 
('0xB0', '0x40', '0xBF', '0x4F') 
>>> 
0

Bitte versuchen Sie diesen Ansatz:

heartbeat_replys = ('0xFF', '0x0F', '0xF0', '0x00', '0xB0', '0x40', '0xBF', '0x4F', '0xE9', '0x19', '0xE6', '0x16') 
received = '0xff', '0x0f', '0xF0', '0x00' 
for index in range(len(heartbeat_replys) - len(received)): 
    if all([heartbeat_replys[i + index].upper() == received[i].upper() for i in range(len(received))]): 
      print heartbeat_replys[ index + len(received) : index + 2 * len(received) ] 
      break 

Ausgang:

('0xB0', '0x40', '0xBF', '0x4F') 
0

ich von einem dict-Mapping nach einer Aufteilung der Elemente in Tupeln schaffen würde Gruppen von vier Elementen, wobei die Schlüssel für jede Gruppe stehen und die Werte der Index sind, in dem sie erscheinen:

heartbeat_replys = ('0xFF', '0x0F', '0xF0', '0x00', 
       '0xB0', '0x40', '0xBF', '0x4F', 
       '0xE9', '0x19', '0xE6', '0x16') 


heartbeat_replys = list(zip(*[iter(heartbeat_replys)] * 4)) 


beats = dict(zip(heartbeat_replys , range(len(heartbeat_replys)))) 

arg = ('0xFF', '0x0F', '0xF0', '0x00') 

print(heartbeat_replys[(beats[arg] + 1) % len(heartbeat_replys)]) 

('0xB0', '0x40', '0xBF', '0x4F') 

Verwendung von Modulo radeln die Liste und ich nehme an, was man bekommt auch Groß ist, wenn nicht nur str.upper auf den übergebenen Strings nennen.