我有一个列表a
,其id, (x,y), err
与对象检测相关联。因此,每个id
都与err
相关联。 err
的值从0更改为5.我想要做的是将err
与每个id
相关联,并检查它是否等于0.如果err
为0,然后将id
附加到列表errorfree_id
。我无法通过上述代码执行此操作。用字典做这个会更好吗?任何帮助将不胜感激。
errorfree_id = []
a = [(1,(50,26),0),(6,(18,29),0),(4,(4,18),1)]
for id, (x,y) , err in a:
if id in err == 0:
errorfree_id.append(id)
return errorfree_id
答案 0 :(得分:2)
这是一种方式:
errorfree_id = []
a = [(1,(50,26),0), (6,(18,29),0), (4,(4,18),1)]
for i, j, k in a:
if k == 0:
errorfree_id.append(i)
errorfree_id # [1, 6]
但是,列表理解可能更容易维护:
errorfree_id = [i for i, _, k in a if k == 0]
答案 1 :(得分:1)
您的情况只是错误:
for id, (x,y) , err in a:
if err == 0:
errorfree_id.append(id)
if id in err == 0
应为if err == 0
答案 2 :(得分:1)
您还可以使用filter
和lambda
来执行此操作:
errorfree_id = [i[0] for i in filter(lambda (i,_,l): l==0, a)]
输出:
[1, 6]
答案 3 :(得分:1)
你可以使用列表解析和元组解包:
>>> a = [(1,(50,26),0),(6,(18,29),0),(4,(4,18),1)]
>>> [id for id,(x,y),err in a if err==0]
[1, 6]