我正在从传输中接收来自不同设备的ID。我将这些ID放在列表中一会儿。填充列表很容易,但是我想设置一个计时器,以便其中一个发射机停止发送时间x,我想从列表中删除该ID。

要构建此列表,我需要:

tags_list = []

    while True:
    #######################################################################################
    #FOR CHECK IN THREAD
    #######################################################################################

    readable, writable, exceptional = select.select([sock], [], [], 1.0)
    if readable:
        data = sock.recv(1024)
        tag_address = ':'.join('%02x' % ord(c) for c in data[12:6:-1])
        if len(data) == 41:
            if tag_address in valid_tags:
                if len(tags_list) > 0:
                    if tag_address not in wander_tags:
                            tags_list.append(tag_address)
                else:
                    print "ERROR"


但是,当无法收到ID时,我无法提出一种有效地从列表中删除ID的方法。有任何想法吗? tag_address的格式为xx:xx:xx:xx:xx:xx

编辑以删除“列表”作为列表名称。

最佳答案

我会用字典。

import time

transmitted_IDs = {}
while True:
    to_delete = []
    ID = data[1:4]
        if ID not in transmitted_IDs:
            transmitted_IDs[ID] = time.time()
    for ID, time_taken in transmitted_IDs.iteritems():
        ## Iterating over a dict, we get key, value pairs
        ## So here time_taken is transmitted_IDs[ID]
        if time.time() - time_taken >= x:
            to_delete.append[ID]
    for ID in to_delete:
        del transmitted_IDs[ID]


现在,您可以在代码的其他位置使用transmitted_IDs.keys()而不是在任何地方使用list的地方。

10-08 08:27