例如,我有這個如何返回包含子串的數組的索引?
list = [('motor', 2),('steel',1),('metal',4)]
如何獲取包含單詞金屬行的指數?我試過使用
list.index('metal')
但它說金屬不在列表中。
例如,我有這個如何返回包含子串的數組的索引?
list = [('motor', 2),('steel',1),('metal',4)]
如何獲取包含單詞金屬行的指數?我試過使用
list.index('metal')
但它說金屬不在列表中。
「它說,金屬是不是在列表中。」
而且它是正確的。 "metal"
字符串不是您列表中的元素(順便說一句,它不應該被稱爲list
),它是列表元組的元素。
data = [('motor', 2),('steel',1),('metal',4)]
print(data.index(('metal',4)))
# 2
如果你想在'metal'
是元組的第二個元素,你可以只使用一個dict
:
print(dict(data)['metal'])
# 4
如果只想如果有一個精確匹配index()
方法返回一個索引包含'metal'
元組的索引,你可以使用:
print([i for i in range(len(data)) if 'metal' in data[i]])
# [2]
如果你只想要第一個索引,見@tobias_k's answer。
如果我的數組是:list = [['motor',2],['steel',1],['metal',4]]金屬,會有一個更簡單的方法來做到這一點編程? – Jessie
你不能只用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
作爲變量名,因爲它陰影內置式。
不錯,我不知道'next'接受一個回退值而不是拋出StopIteration。假的值是否會比'-1'更好?這可以解釋爲一個指數? –
@EricDuminil你必須檢查任何一種方式,但你也可以只返回'None'或讓'next'引發異常,就像'index'一樣。 –
在我看來,你需要一本字典,使其工作 – valeas
你是什麼意思? – Jessie
正如已經指出的答案,您不能使用索引訪問元組,並且將元組作爲列表的元素。你可以將你的列表轉換成程序中的字典嗎? – valeas