python中enumerate()函式運用
昨天在leetcode上做題,發現答案的解法特別簡潔,特此記錄下來,來感受一下python之美~
題目要求如下:
Given two lists A
and B
,
and B
is an anagram of A
. B
is
an anagram of A
means B
is
made by randomizing the order of the elements in A
.
We want to find an index mapping P
, from A
to B
.
A mapping P[i] = j
means the i
th
element in A
appears in B
j
.
These lists A
and B
may
contain duplicates. If there are multiple answers, output any of them.
For example, given
A = [12, 28, 46, 32, 50] B = [50, 12, 32, 46, 28]We should return
[1, 4, 3, 2, 0]as
P[0]
= 1
because the 0
th
element of A
appears
at B[1]
,
and P[1] = 4
because
the 1
st
element of A
appears
at B[4]
,
and so on.
Note:
A, B
have equal lengths in range[1, 100]
.A[i], B[i]
are integers in range[0, 10^5]
.
class Solution(object):
def anagramMappings(self, A, B):
D = {x: i for i, x in enumerate(B)}
return [D[x] for x in A]
做題時還在苦逼的寫著for迴圈,看到答案的一刻發現自己真是有點弱,anyway,繼續加油!
解釋一下這個優美的地方,首先介紹一下enumerate(),他是python的內建函式,可以對一個可迭代的(iterable)或者可遍歷的物件(如列表、字串),將其組成一個索引序列,利用它可以同時獲得索引和值,解法中將B變成了一個key:value的字典,然後把value和key對換組成一個新的字典D,return [D[x] for x in A]的意思是,如果新字典的value值在A中就返回其key值,就得到了A與B中元素的對映關係,真的很簡潔。