繁体   English   中英

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

[英]Finding the index of the first element of a list in another list

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作为其索引。

如果需要澄清,我可以编辑该帖子并提供其他详细信息。 抱歉,英语不是我的母语。

试试这个

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

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

您可以使用join()函数将两个列表都转换为字符串,然后反复比较字符串以找到匹配项。

编辑:对它进行了更改两个数字位数的工作。 还添加了一个浮子盒。

例如:

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)

如果您想要一种算法解决方案:

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

一种更有效的衬垫:

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

将它们转换为带有用逗号分隔的元素的字符串,找到出现的位置,然后减去当逗号不存在时找到的出现位置,并且您有答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM