我试图在数组中获取字符串索引。
这样做最恰当和最快捷的方法是什么?
答案 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;