python - Replacing elements in a list with the indices of a list containing all unique elements -


assume have list contains unique nodes a-d of graph:

list1 = [a, b, c, d] 

and list, contains edges of graph pairs of elements:

list2 = [[c, d], [b, a], [d, a], [c, b]] 

how can write fast , economic way replace elements of list2 indices of elements in list1, get:

list3 = [(2, 3), (1, 0), (3, 0), (2, 1)] 

my current way of doing is:

for in range(len(list2)):     list3[i] = (list1.index(list2[i][0]), list1.index(list2[i][1])) 

however, takes long time large list, , trying find potentially faster way this.

you can create dict letters indices want

>>> indices = {key: index index, key in enumerate(list1)} >>> indices {'b': 1, 'd': 3, 'a': 0, 'c': 2} 

then use nested list comprehension

>>> [[indices[i] in sub] sub in list2] [[2, 3], [1, 0], [3, 0], [2, 1]] 

edit
list of tuple

>>> [tuple(indices[i] in sub) sub in list2] [(2, 3), (1, 0), (3, 0), (2, 1)] 

Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -