Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在数组中索引字符串?_Arrays_List_Substring - Fatal编程技术网

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

Arrays 如何在数组中索引字符串?,arrays,list,substring,Arrays,List,Substring,我正在尝试获取数组中字符串的索引 最合适、最快捷的方法是什么 使用新方法从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 =

我正在尝试获取数组中字符串的索引


最合适、最快捷的方法是什么

使用新方法从
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

假设您的主列表是:
your\u 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

您可以创建一个列表,以返回所有此类实例:

>>> 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]
>>>

我认为如果您只想匹配第一个结果,这将是最简单的方法:

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])

一种有效的方法,用于查找包含要查找的子字符串的一个或所有索引(索引)

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]

如果要将lambda分配给名称,请不要使用
lambda
。今天的
lambda
的要点是创建一个匿名函数。在这种情况下使用
def
语句。但是它非常紧凑,如果您只需要它的一倍或两倍,它就可以了。@knurzl它明确地反对PEP8。但是你想做什么就做什么为什么你用python 2而不是python 3编程?@knurzl-这和这个问题又有什么关系?@knurzl你是什么意思?一个比另一个好吗?我只是对它感兴趣,因为我用3编程,因为它是新的。你的方法比其他方法快吗?如果是这样的话,你介意为学习目的解释一下逻辑吗?提前谢谢你,它运行在O(mn)中,并且非常类似于发布的其他答案,如果这回答了你的问题..它对整数列表不起作用吗?如何将列表中的每个元素转换为字符串?您可以将列表项转换为如下字符串:
newlist=[str(I)for I in oldlist]