如何返回包含子字符串的数组的索引?

时间:2017-04-11 11:06:53

标签: python

示例,我有这个

list = [('motor', 2),('steel',1),('metal',4)]

如何获取包含单词metal的行的索引?我尝试使用

list.index('metal') 

但是它说金属不在列表中。

2 个答案:

答案 0 :(得分:2)

  

“它说金属不在列表中。”

这是正确的。 "metal"字符串不是列表中的元素(顺便说一下,它不应该被称为list),它是列表元组的元素。仅当存在完全匹配时,index()方法才会返回索引:

data = [('motor', 2),('steel',1),('metal',4)]
print(data.index(('metal',4)))
# 2

如果你想要'metal'所在的元组的第二个元素,你可以使用dict

print(dict(data)['metal'])
# 4

如果你想要包含'metal'的元组的索引,你可以使用:

print([i for i in range(len(data)) if 'metal' in data[i]])
# [2]

如果您只想要第一个索引,请参阅@tobias_k's answer

答案 1 :(得分:2)

您不能只使用index,因为列表中的每个元素实际上都是tuple个元素。您可以enumerate列表并使用in-1返回包含给定字符串的next元素,如果找不到此类元素的话。

>>> lst = [('motor', 2), ('steel', 1), ('metal', 4)]
>>> next((i for i, tp in enumerate(lst) if "metal" in tp), -1)
2
>>> next((i for i, tp in enumerate(lst) if "foo" in tp), -1)
-1

如果这些元组总是有两个元素并且你知道哪个元素匹配,你也可以在生成器表达式中使用元组解包并直接与其中一个值进行比较,而不是使用in

>>> next((i for i, (x, y) in enumerate(lst) if (x == "metal")), -1)
2

另外,最好不要使用list作为变量名,因为它会影响内置类型。