文章出處

給定一個列表,要求刪除列表中重復元素。

listA = ['python','','','','','','','','','']

方法1,對列表調用排序,從末尾依次比較相鄰兩個元素,遇重復元素則刪除,否則指針左移一位重復上述過程:

def deleteDuplicatedElementFromList(list):
        list.sort();
        print("sorted list:%s" % list)
        length = len(list)
        lastItem = list[length - 1]
        for i in range(length - 2,-1,-1):
                currentItem = list[i]
                if currentItem == lastItem:
                        list.remove(currentItem)
                else:
                        lastItem = currentItem
        return list

方法2,設一臨時列表保存結果,從頭遍歷原列表,如臨時列表中沒有當前元素則追加:

def deleteDuplicatedElementFromList2(list):
        resultList = []
        for item in list:
                if not item in resultList:
                        resultList.append(item)
        return resultList

方法3,利用python中集合元素惟一性特點,將列表轉為集合,將轉為列表返回:

def deleteDuplicatedElementFromList3(listA):
        #return list(set(listA))
        return sorted(set(listA), key = listA.index)

執行結果:

print(deleteDuplicatedElementFromList(listA))        
#sorted list:['python', '一', '動', '態', '是', '言', '言', '語', '語', '門']
#['python', '一', '動', '態', '是', '言', '語', '門']

print(deleteDuplicatedElementFromList2(listA))        
#['python', '語', '言', '是', '一', '門', '動', '態']

print(deleteDuplicatedElementFromList3(listA))        
#['python', '語', '言', '是', '一', '門', '動', '態']

分析:

方法1,邏輯復雜,臨時變量保存值消耗內存,返回結果破壞了原列表順序,效率最差
方法2,直接調用append方法原處修改列表,邏輯清晰,效率次之
方法3,極度簡潔,使用python原生方法效率最高


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()