【Python進階】刪除list裡的重複元素的三種方法效率分析
sorted(iterable, key=None, reverse=False) --> new sorted list eg. sorted(l, key = l.index),生成一個新的了list, 原list不變
2. sort(...)
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* eg. l.sort(key = l.index), 返回一個新的list給原來的list
3. index(...)
L.index(value, [start, [stop]]) -> integer -- return first index of value. 返回第一個value所在的index
Raises ValueError if the value is not present.
4. pop(...)
L.pop([index]) -> item -- remove and return item at index (default last). remove引數index指向的value,返回的是value
Raises IndexError if list is empty or index is out of range.
5.remove(...)
L.remove(value) -> None -- remove first occurrence of value. remove第一個value, 返回none
Raises ValueError if the value is not present.
6. if __name__ = '__main__'的作用:
模組是物件,並且所有的模組都有一個內建屬性__name__,它的值取決於模組是如何應用的。如果import了這個模組,__name__通常為模組檔名,不帶路徑
或者副檔名。如果不import,像一個標準程式一樣執行這個模組,__name__的值將是一個特別預設的”__main__“
方法一:將列表排序後,從最後一個元素開始迴圈迭代列表,判斷相鄰的兩個元素是否相等
有賦值,排序操作。由於Pyhton變數也是物件,中每迭代出一個與last_item不相等的元素後,都重新建立一個區域性變數並丟棄原來的變數,需要消耗更多記憶體。
而且由於排序操作,相對位置被破壞了。
def sort_one(list):
list.sort()
length = len(list)
last_item = list[length -1 ]
for i in range(len(list) - 2, -1, -1):
if last_item == list[i]:
list.remove(last_item)
else:
last_item = list[i]
if __name__ == '__main__':
sort_one(a)
print(a)
方法二: 建立一個臨時列表,迭代迴圈出的元素如果不在臨時列表裡,就將其加入臨時列表,最後返回臨時列表
每次旨在原來的列表上增加一個索引和值,相比方法一效率更高
def sort_two(list):
list.sort()
temp_list = []
for value in list:
if value not in temp_list:
temp_list.append(value)
return temp_list
if __name__ == '__main__':
print(sort_two(a))
方法三:效率最高,使用set,好處是快速,壞處是打亂了列表的順序,需要重新sort
def sort_three(list):
new_list = sorted(set(list))
return new_list
if __name__ == '__main__':
print(sort_three(a))