2013-03-05 98 views
2
list = ["word1", "word2", "word3"] 
print list.index("word1") 

這工作正常!我如何獲得列表中的列表索引?

但我如何獲得這個指數:

list = [["word1", "word2", "word3"],["word4", "word5", "word6"]] 
print list.index("word4") 

清楚,不工作,錯誤:

ValueError: "word4" is not in list 

我期待像1,0

回答

3

嘗試是這樣的:

def deep_index(lst, w): 
    return [(i, sub.index(w)) for (i, sub) in enumerate(lst) if w in sub] 

my_list = [["word1", "word2", "word3"],["word4", "word5", "word6"]] 
print deep_index(my_list, "word4") 
>>> [(1, 0)] 

這將返回一個元組列表帶有指向外列表中的索引,並在該子列表中的字的索引的第二個元素的第一個元素。

+0

要匹配'(行,列)'約定,你應該切換的'(I,sub.index(W))的順序' – askewchan 2013-03-05 21:03:42

+0

@askewchan哎呀,謝謝!它在代碼中實際上是正確的,我只是在輸出中錯誤地輸入了它。 – 2013-03-05 21:05:52

+0

哈,我寫這個時很困惑,因爲它看起來是正確的......但沒有匹配。 – askewchan 2013-03-05 21:07:06

1

的答案,我認爲你必須手動找到它 -

def index_in_list_of_lists(list_of_lists, value): 
    for i, lst in enumerate(list_of_lists): 
     if value in lst: 
     break 
    else: 
     raise ValueError, "%s not in list_of_lists" %value 

    return (i, lst.index(value)) 


list_of_lists = [["word1", "word2", "word3"],["word4", "word5", "word6"]] 
print index_in_list_of_lists(list_of_lists, 'word4') #(1, 0) 
1
def get_index(my_list, value): 
    for i, element in enumerate(my_list): 
     if value in element: 
      return (i, element.index(value)) 
    return None 


my_list= [["word1", "word2", "word3"], ["word4", "word5", "word6"]] 
print get_index(my_list, "word4") 

打印(1,0)

+0

OP想要兩個數字,一個索引外部列表,一個索引內部列表。 – 2013-03-05 20:58:26

+0

@Robᵩ,謝謝。我錯過了它 – imkost 2013-03-05 21:02:24

1

在未來,儘量避免命名您的變量list,因爲它會覆蓋Python的內置list

lst = [["word1", "word2", "word3"],["word4", "word5", "word6"]] 

def find_index_of(lst, value): 
    for index, word in enumerate(lst): 
     try: 
     inner_index = word.index(value) 
     return (index, inner_index) 
     except ValueError: 
     pass 
    return() 

此遍歷的lst每一個元素,它會:

  • 嘗試獲得valueindex。如果我們找到了元素,那麼讓我們返回索引。
  • 但是,如果Python拋出ValueError(因爲該元素不在列表中),那麼讓我們繼續下一個列表。
  • 如果沒有找到,返回一個空元組。

輸出:

find_index_of(lst, 'word4') # (1, 0) 
find_index_of(lst, 'word6') # (1, 2) 
find_index_of(lst, 'word2') # (0, 1) 
find_index_of(lst, 'word78') #() 
2

對於多維索引,假設你的數據可以表示爲N×M的(而不是一般的名單列表),numpy的是非常有用的(和快速)。

import numpy as np 
list = [["word1", "word2", "word3"],["word4", "word5", "word6"]] 
arr = np.array(list) 
(arr == "word4").nonzero() 
# output: (array([1]), array([0])) 
zip(*((arr == "word4").nonzero())) 
# output: [(1, 0)] -- this gives you a list of all the indexes which hold "word4"