python技巧(2)–碾平列表和列表去重
- 2020 年 2 月 19 日
- 筆記
總第 116 篇文章,本文大約 1000 字,閱讀大約需要 3 分鐘
今天介紹和列表相關的兩個小技巧:
- 碾平列表(flatten list),也就是列表裡的元素也帶有列表的情況;
- 列表去重,保留原始順序和不保留順序的做法
1. 碾平列表
碾平列表(flatten list ),即當列表裡面嵌套列表,如何將這些子列表給取出來,得到一個不包含子列表的列表,示例如下:
list1 = [1, [2, [3,4]], 5] =>new_list = [1, 2, 3, 4, 5]
這裡介紹 3 種方法,分別如下。
方法1:利用遞歸的思想,程式碼如下:
list1 = [1, [2, [3,4]], 5] res = [] def fun(s): for i in s: if isinstance(i, list): fun(i) else: res.append(i) fun(list1) print(res)
接著是兩種比較高級的寫法,用 lambda
實現一個匿名函數
方法2:
flat = lambda L: sum(map(flat, L), []) if isinstance(L, list) else [L] print(flat(list1))
方法3:
a = [1, 2, [3, 4], [[5, 6], [7, 8]]] flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] print(flatten(a))
2. 列表去重
列表去重可能會破壞原有的順序,所以下面分別介紹保留順序和不保留順序的做法。
去重,但改變順序
去重但改變順序,兩種方法
方法1 就是利用 set
進行去重
l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2
方法2 是利用字典的鍵不重複的特性,將列表的元素作為一個字典的鍵,然後返回這個字典的所有鍵,即可實現去重的操作。
l1 = ['b','c','d','b','c','a','a'] l2 = {}.fromkeys(l1).keys() print l2
去重,不改變順序
利用 sorted
和 set
方法實現去重並保留原始順序,這裡 sorted
指定排序的規則就是按照原列表的索引順序
l1 = ['b','c','d','b','c','a','a'] l2 = sorted(set(l1),key=l1.index) print l2