如何在数组中索引字符串?

时间:2017-05-26 22:24:18

标签: arrays list substring

我试图在数组中获取字符串索引。

这样做最恰当和最快捷的方法是什么?

5 个答案:

答案 0 :(得分:3)

假设您的主列表是:dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul); dispatch_async(queue, ^{ }); ,多个子字符串列表是: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

答案 1 :(得分: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

答案 2 :(得分: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]
>>>

答案 3 :(得分: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])

答案 4 :(得分: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>
&#13;
&#13;
&#13;