Python編程題29--兩個(gè)列表的最小索引總和

題目

給定兩個(gè)列表,每個(gè)列表都不含有重復(fù)元素,但兩個(gè)列表之間可能包含有共同元素,請(qǐng)計(jì)算兩個(gè)列表中共同元素的最小索引之和,并以列表的形式,返回對(duì)應(yīng)的元素,如果兩個(gè)列表沒有共同元素,則返回空列表。

例如:

給定兩個(gè)列表:list1=['hello', 'word', '222', 'hi', 'good'], list2=['first', 'hi', 'good', 'WORD', 'hello']
返回結(jié)果:['hi', 'hello']

說明:兩個(gè)列表存在 3 個(gè)共同元素,這3個(gè)元素對(duì)應(yīng)的索引之和分別為 0+4、3+1、4+2,所以最小索引之和為 4 ,對(duì)應(yīng)的重復(fù)元素是 ['hi', 'hello']

給定兩個(gè)列表:list1=['hello', 'word'], list2=['first', 'hi']
返回結(jié)果:[]

說明:兩個(gè)列表不存在共同元素,直接返回空列表。

實(shí)現(xiàn)思路

  • 通過set集合的方式求出共同元素,并保存到 tmp_set 中,如果 tmp_set 為空,則直接返回空列表
  • 分別用字典 tmp_dict1 和 tmp_dict2 存儲(chǔ)2個(gè)列表中每個(gè)元素及其索引
  • 用字典 index_sum_dict 存儲(chǔ)2個(gè)列表中共同元素及對(duì)應(yīng)索引之和
  • 求出2個(gè)列表的最小索引之和
  • 根據(jù)最小索引之和,求出對(duì)應(yīng)的共同元素

代碼實(shí)現(xiàn)

def findRestaurant(self, list1, list2):
    tmp_set = set(list1) & set(list2)
    if len(tmp_set) == 0:
        return []
    tmp_dict1 = {list1[i]: i for i in range(len(list1))}
    tmp_dict2 = {list2[i]: i for i in range(len(list2))}
    index_sum_dict = {i: (tmp_dict1.get(i) + tmp_dict2.get(i)) for i in tmp_set}
    min_index_sum = min(list(index_sum_dict.values()))
    return [i for i in tmp_set if index_sum_dict.get(i) == min_index_sum]

更多Python編程題,等你來挑戰(zhàn):Python編程題匯總(持續(xù)更新中……)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容