Skip to content Skip to sidebar Skip to footer

List Match In Python: Get Indices Of A Sub-list In A Larger List

For two lists, a = [1, 2, 9, 3, 8, ...] (no duplicate values in a, but a is very big) b = [1, 9, 1,...] (set(b) is a subset of set(a), 1<

Solution 1:

A fast method (when a is a large list) would be using a dict to map values in a to indices:

>>>index_dict = dict((value, idx) for idx,value inenumerate(a))>>>[index_dict[x] for x in b]
[0, 2, 0]

This will take linear time in the average case, compared to using a.index which would take quadratic time.

Solution 2:

Presuming we are working with smaller lists, this is as easy as:

>>>a = [1, 2, 9, 3, 8] >>>b = [1, 9, 1] >>>[a.index(item) for item in b]
[0, 2, 0]

On larger lists, this will become quite expensive.

(If there are duplicates, the first occurrence will always be the one referenced in the resulting list, if not set(b) <= set(a), you will get a ValueError).

Post a Comment for "List Match In Python: Get Indices Of A Sub-list In A Larger List"