seb*_*szw 14 python indexing list
我有具有属性id的对象列表,我想找到具有特定id的对象的索引.我写了这样的东西:
index = -1
for i in range(len(my_list)):
if my_list[i].id == 'specific_id'
index = i
break
Run Code Online (Sandbox Code Playgroud)
但它看起来不太好.还有更好的选择吗?
Joe*_*ett 26
使用enumerate时,你在想这两个值和指数for环:
for index, item in enumerate(my_list):
if item.id == 'specific_id':
break
else:
index = -1
Run Code Online (Sandbox Code Playgroud)
或者,作为生成器表达式:
index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1)
Run Code Online (Sandbox Code Playgroud)
这是一个不使用(显式)循环的替代方法,使用两种不同的方法从原始列表生成"id"值列表.
try:
# index = map(operator.attrgetter('id'), my_list).index('specific_id')
index = [ x.id for x in my_list ].index('specific_id')
except ValueError:
index = -1
Run Code Online (Sandbox Code Playgroud)
你可以使用enumerate:
for index, item in enumerate(my_list):
if item.id == 'specific_id':
break
Run Code Online (Sandbox Code Playgroud)