Python - 如何搜索元组

时间:2016-03-22 22:45:13

标签: python-2.7

我在Python中有一个元组,一种列表.. tpple是这样的:

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

我收到一行4个十六进制值,它们位于元组中的某个位置。我想搜索该行,然后发送接下来的4个十六进制值。

例如我收到'0xff', '0x0f', '0xF0', '0x00' 我想在元组中搜索值,然后发送接下来的4个十六进制值.. '0xB0', '0x40', '0xBF', '0x4F' ...但如果我收到其他值我要发送然后接下来的4个等等...我知道如何拆分元组以及如何获取元组的索引但我不知道如何搜索元组值然后沿着元组进行并打印输出或从元组发送接下来的4个值。 谢谢。

3 个答案:

答案 0 :(得分:0)

请尝试这种方法:

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

输出:

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

答案 1 :(得分:0)

这样的事情

>>> 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')
>>> 

答案 2 :(得分:0)

在将元素拆分为四元素组的元组之后,我会创建一个dict映射,其中键是每个组,值是它们出现的索引:

str.upper

使用modulo将循环列表,我假设你得到的也是大写的,如果不是只是在传入的字符串上调用{{1}}。