2017-05-26 16 views
2

我想獲得數組中的字符串的索引。如何索引數組中的字符串?

這樣做最合適和最快的方式是什麼?

+0

爲什麼你與Python 2程序,而不是3? – knurzl

+0

@knurzl - 那又是怎麼一回事? –

+0

@knurzl你是什麼意思?有人比其他人更好嗎? –

回答

3

假設你的主目錄是:your_arr,並且多串名單:multiple

def find_multiple_substring(your_arr, multiple): 
    res = [i for i, item in enumerate(your_arr) if all(x in item for x in multiple)] 
    return res[0] if res else -1 

你會稱其爲:

x = ["pink-one", "pink-two", "pink-three", "pink-four"] 
y = ["pink", "one"] # For a search to be successful, all of these 
        # strings should be present in `x`. 
find_multiple_substring(x, y) # returns 0 
+0

您的方法比其他方法更快嗎?如果是這樣,你介意解釋學習的邏輯嗎?預先感謝您 –

+0

它在O(mn)中運行,並且與其他人發佈的答案非常相似,如果這可以回答您的問題。 – SuperSaiyan

2

如何從一個新的方法繼承list類?

class DualIndexList(list): 
    def dual_index(lst, first, second): 
     for ix, l in enumerate(lst): 
      if first in l and second in l: 
       return ix 
     return -1 

mylist = DualIndexList(["pink-one", "pink-two", "pink-three", "pink-four"]) 

print mylist.dual_index("pink", "one") 

結果:0

你也讓這個無限擴展:

class NthIndexList(list): 
    def nth_index(lst, *args): 
     for ix, l in enumerate(lst): 
      count = 0 
      arglength = len(args) 
      for arg in args: 
       if arg in l: 
        count += 1 
       else: 
        continue 
       if count == arglength: 
        return ix 
     return -1 

mylist = NthIndexList(["pink-one-a", "pink-two-b", "pink-three-c", "pink-four-d"]) 

print mylist.nth_index("pink", "one", "a") 

結果:0

+0

它不適用於整數列表嗎?如何將列表中的每個元素轉換爲字符串? –

+0

您可以將列表項轉換爲如下字符串:'newlist = [str(i)for my oldlist]' – JacobIRR

1

你可以做一個列表理解來回饋所有這些情況:

>>> a = ["pink-one", "pink-two", "pink-three", "pink-four"] 
>>> q = "one" 
>>> sub_indices = lambda query,lib: [i for i,x in enumerate(lib) if query in x] 
>>> sub_indices(q,a) 
[0] 
>>> 
+1

如果要將其分配給名稱,請不要使用'lambda'。今天'lambda'的全部內容是創建* anonymous *函數。在這種情況下使用'def'語句。 –

+0

但它非常緊湊,如果你只需要它一兩次就可以了。 – knurzl

+0

@knurzl明確反對PEP8。但做你想做的 –

1

我覺得如果你只是將是最簡單的方法想匹配第一個結果:

lst = [「pink-one」, 「pink-two」, 「pink-three」, 「pink-four」] 

print(lst.index([x for x in lst if 'one' in x][0])) 

另一個選項是lambda:

print(list(filter(lambda x: 'one' in x, lst))[0]) 
0

找到包含您正在查找的子字符串的一個索引或所有索引(索引)的有效方法。

def index_with_substrings(l, substrings): 
    return next(indexes_with_substrings(l, substrings), None) 

def indexes_with_substrings(l, substrings): 
    for i, element in enumerate(l): 
    if all(substring in element for substring in substrings): 
     yield i 
    raise StopIteration() 


l = ['pink-one', 'pink-two', 'pink-three', 'pink-four'] 
print(index_with_substrings(l, ['pink', 'one'])) # 0 
print(index_with_substrings(l, ['pink', 'three'])) # 2 
print(index_with_substrings(l, ['pink', 'five'])) # None 
print(list(indexes_with_substrings(l, ['pink']))) # [0, 1, 2, 3] 

<script src="//repl.it/embed/ITuU/0.js"></script>

相關問題