在另一个列表中查找列表的第一个元素的索引

时间:2016-11-12 20:28:08

标签: python python-3.x

main_list = ['4', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
my_list = ['4', '5', '6']

我的问题是,如何在main_list中找到my_list的索引?

my_list中的整数必须在main_list中按顺序排列。

我尝试使用main_list.index(my_list[0]),但如果有多个特定元素,则返回错误的索引号。我需要得到的结果是4,但是对于main_list.index(my_list[0]),它只会给0作为索引。

如果需要澄清,我可以使用其他详细信息编辑帖子。对不起,英语不是我的第一语言。

4 个答案:

答案 0 :(得分:2)

尝试这样的事情

for i in range(len(main_list)-len(my_list)):
    if main_list[i:i+len(my_list)] == my_list:
        index = i 
        break

这应适用于列表中可能存在的所有可能类型。

答案 1 :(得分:1)

您可以使用join() function将两个列表转换为字符串,并迭代比较字符串以找到匹配项。

编辑:为多位数字做了两项工作。还添加了一个浮箱。

例如:

main_list = ['4', '1', '2', '3', '40.1', '52', '61', '7', '8', '9', '10']
my_list = ['40.1', '52', '61']
index = -1

for i in range(len(main_list)):
    if '#'.join(main_list[i:i+len(my_list)]) == '#'.join(my_list):
        index = i
        break

print(index)

答案 2 :(得分:0)

如果您需要算法解决方案:

def Find(haystack, needle):
    n, h = len(needle), len(haystack)
    assert n <= h

    for i in range(h):
        if h - i <= n: break
        count = 0
        for i_, j in zip(range(i, i + n), range(n)):
            if haystack[i_] == needle[j]:
                count += 1
        if count == n: return i

    return -1

答案 3 :(得分:0)

更有效的一个班轮:

print ','.join(main_list).find(','.join(my_list)) - ''.join(main_list).find(''.join(my_list))

将它们转换为字符串,其中的元素用逗号分隔,找到匹配项,然后减去当逗号不存在时发现的事件,并得到答案。