获取列表haystack
和needles
haystack = ['a', 'b', 'c', 'V', 'd', 'e', 'X', 'f', 'V', 'g', 'h']
needles = ['V', 'W', 'X', 'Y', 'Z']
我需要生成一个索引列表,其中needles
的任何元素都出现在haystack
中。在这种情况下,这些索引是3、6和8,因此
result = [3, 6, 8]
This question I found非常相似,并且用
result = [haystack.index(i) for i in needles]
不幸的是,在我的例子中,这个解决方案给出了ValueError: 'W' is not in list
。这是因为这里的区别是needles
的元素可能在haystack
中出现多次,或者根本不出现。
换句话说,haystack
可能不包含针头,也可能包含许多针头。
即使您使用
[haystack.index(i) for i in needles if i in haystack]
,它也不会像您使用重复的元素那样工作。生成
st = set(needles)
意味着我们有一个线性的解决方案,因为集合查找是0(1)
,对于大输入,这将显著提高效率。如果指针不在haystack中,除了失败之外,index方法将只返回您要查找的元素的第一个位置,即使该元素出现多次(如示例中的
'V'
)。你可以这样做:枚举函数生成生成值元组的生成器-第一个是索引,第二个是值:
只要检查每个值是否在您的针列表中,并添加索引,如果它是。
相关问题 更多 >
编程相关推荐