列表去重 去除滿足一定條件的元素

2022-03-01 12:42:36 字數 1633 閱讀 8018

列表去重(保持原來的順序)

from functools import reduce

list1 = [1,4,3,3,4,2,3,4,5,6,1]

# func = lambda x,y:x if y in x else x + [y]

list2=reduce(lambda x,y:x if y in x else x + [y], [, ] + list1)

print(list2)

print(list1)

reduce中都發生了什麼?

答:reduce(function, iterable[, initializer])

function -- 函式,有兩個引數

iterable -- 可迭代物件

initializer -- 可選,初始引數

reduce 中的函式 function(有兩個引數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 function 函式運算,最後得到乙個結果。

案例解釋:

reduce中有2個引數,

引數一為乙個匿名函式:lambda x,y:x if y in x else x + [y]

引數二為乙個可迭代的列表:[, 1, 4, 3, 3, 4, 2, 3, 4, 5, 6, 1]

lambda函式的解釋:[ , a1, a2, a1, a4]

第一次:x為,y為a1。如果y在x中已經出現了,那麼返回x。否則返回x+[y],即為把y放到x中去。

第二次:x為[a1],即為上次返回的結果,y為a2。如果y在x中已經出現了,那麼返回x。否則返回x+[y],即為把y放到x中去。

第三次:x為[a1, a2],即為上次返回的結果,y為a1。如果y在x中已經出現了,那麼返回x。否則返回x+[y],即為把y放到x中去。

第四次:x為[a1, a2],即為上次返回的結果,y為a4。依據以上規則,最終返回[a1, a2, a4]。

reduce對同乙個列表有a1,a2,...,an迭代使用的功能。

reduce()函式的解釋:

reduce(function, iterable[, initializer])

function -- 函式,有兩個引數

iterable -- 可迭代物件

initializer -- 可選,初始引數

返回函式計算結果。

舉例說明:

>>>def add(x, y) : # 兩數相加

... return x + y

...

>>> reduce(add, [1,2,3,4,5]) # 計算列表和:1+2+3+4+5

15>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函式

15reduce() 參考:

其他方法:

map()、filter()、reduce()

列表去除元素長度小於等於1的元素

a = ['what', '1', 'a', 'some', 'b', 'time']

a = [i for i in a if len(i) > 1]

print(a)

輸出['what', 'some', 'time']

刪除列表中滿足一定條件的元素

從列表中刪除滿足一定條件的元素。如 刪除乙個列表中長度為0的元素,或者刪除列表中同時是2和3的倍數的元素。做過高階語言程式設計的人想當然的會認為 這很簡單 可以如下面的方式來實現 for i in listobj if listobj.remove i a 1,2,3,12,12,5,6,8,9 f...

某人一定不會的 重口味線段樹

注意求m的地方 for m 1 m n 1 m 2 爭論了半天的n後面是否 1 是否進行越界處理 後來得出的結論是 1,浪費空間 不加,遇到特殊情況有安全隱患,但證明,對於t,如果為偶數,則不進行處理,所以,可以不加.1 int query int s,intt 7 return ans 8 9vo...

Django 將列表按照一定的順序展示

2 需要用到 list的切片知識 改造view.py中的檢視方法 列表頁def get article request article list article.objects.all 按照文章時間排序 並且是降序排列 order 3 list article.objects.order by ar...