我有listA
,它包含
[0, 20, 40, 60, 80, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320, 340]
和listB
,其中包含
[87, 78343, 100, 38, 100, 20, 80]
我希望能够找到listA
中的数字的索引,它们也在listB
中。你知道吗
例如,listA
和listB
共享100、100、20和80。这些整数在listA
中的索引是
[6, 6, 1, 4, 5]
有没有一个过程可以帮我找到这个,这样我就不用手工了?你知道吗
这类似于this question。不同之处在于,即使索引在任一列表中多次出现,我也必须知道索引,而该链接的答案仅适用于实例的第一个示例:即,listB
中的80位于[4],而listA
中的[5],但所描述的方法只会返回[4]。你知道吗
创建一个包含所有索引(包括重复元素)的dict,然后使用list comp为公共元素添加索引:
如果我们再添加一些80,您可以看到它返回所有适当的索引:
对于大型列表,这将是非常有效的,查找和
0(1)
,因此构建dict的成本将被任何合理大小的数据和良好的伸缩性所抵消。你知道吗不清楚的一点是,如果两个列表中都有重复的条目,会发生什么情况,例如:
变成:
其中
3,4
出现两次,因为3在两次中都重复。你知道吗如果是这样的话,你也可以对b中的元素进行计数:
但是,如果项在B中出现3次,则会得到A中最后一次出现的索引的第一个值:
这可能是你真正想要的:
例如
listA
和listB
,这将产生这将为您提供
listA
中的所有项的索引,这些项也在listB
中。如果你真的想要复制品,那么你可以用这个:这将生成您作为示例给出的列表:
提高性能:
如果您担心运行时问题,那么可以对其中的每一项进行一些优化。对于第一个,基于
listB
创建一个集合并使用-在集合中查找要比在列表中查找快得多,因此除非setB非常小,否则这应该会提高性能。你知道吗
对于具有重复项的版本,您需要创建一个字典,将listA中的每个值映射到它出现的索引列表。然后,在遍历
listB
时,可以使用此查找表而不是遍历listA
来获取索引。这正是Padraic did in his answer所说的。你知道吗排序回答:你知道吗
长回答:你知道吗
相关问题 更多 >
编程相关推荐