我正在从传输中接收来自不同设备的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
的地方。