[英]Finding if any element in a list is in another list and return the first element found
[英]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.