Python轉換列表&&資料去重&&集合
阿新 • • 發佈:2018-12-25
轉換列表是一個很常見的需求,因此Python提供了一個工具。可以儘可能毫不費力第完成這種轉換。工具名稱:列表推導(list comprehension)設計列表推導是為了減少將一個列表轉換為另一個列表時所需編寫的程式碼量。
一些例子:
>>> mins = [1,2,3] >>> secs = [m*60 for m in mins] >>> secs [60, 120, 180] >>> lower = ["I","don't","like","spam"] >>> upper = [s.upper() for s in lower] >>> upper ['I', "DON'T", 'LIKE', 'SPAM'] >>> dirty = ['2-22','2:33','2.22'] >>> clean = [nester.sanitize(t) for t in dirty] >>> clean ['2.22', '2.33', '2.22'] >>> clean = [float(s) for s in clean] >>> clean [2.22, 2.33, 2.22]
上一篇部落格中的程式碼可用列表推導修改為:
print(sorted([float(nester.sanitize(t)) for t in james_list]))
執行結果:
[2.01, 2.01, 2.22, 2.34, 2.34, 2.45, 3.01, 3.1, 3.21]
=============================================================
那麼如何拿到排名前三的資料項,而且保證沒有重複呢?
迭代刪除重複項
重複項刪除過濾器需要在列表建立過程中檢查所建立的列表,這對於列表推導來說是無法做到的。
為了滿足這個新需求,你需要求助於常規的列表迭代程式碼。
james_new_list = sorted([float(nester.sanitize(t)) for t in james_list])
james_unique_list = []
for each_t in james_new_list:
if each_t not in james_unique_list:
james_unique_list.append(each_t)
print(james_unique_list[0:3])
執行結果:
[2.01, 2.22, 2.34]
用集合刪除重複項
Python中集合最突出的特性是結合中的資料項是無序的,而且不允許重複。如果試圖向一個集合增加一個數據項,而該集合中已經包含有這個資料項,Python就會將其忽略。
使用set()BIF建立一個空集合,這是工廠函式的一個例子:
distances = set()
>>> james_unique_list = set(james_new_list)
>>> james_unique_list
{2.22, 3.1, 3.21, 2.01, 3.01, 2.34, 2.45}
>>> print(sorted(james_unique_list)[0:3])
[2.01, 2.22, 2.34]