列表去重、去除满足一定条件的元素

列表去重(保持原来的顺序)

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 匿名函数
15

reduce() 参考:

https://www.runoob.com/python/python-func-reduce.html

https://www.cnblogs.com/lincappu/p/8148851.html

 

其他方法:

https://www.cnblogs.com/zknublx/p/6042295.html

map()、filter()、reduce()

 https://www.cnblogs.com/mxp-neu/articles/5316557.html

 

列表去除元素长度小于等于1的元素

a = ['what', '1', 'a', 'some', 'b', 'time']
a = [i for i in a if len(i) > 1]
print(a)

  

输出

['what', 'some', 'time']

 

将2个list合并成一个元组list:

https://geek-docs.com/python/python-ask-answer/346_python_how_to_merge_lists_into_a_list_of_tuples.html

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c']
result = list(zip(list1, list2))
print(result)

输出

[(1, 'a'), (2, 'b'), (3, 'c')]

 

posted @ 2018-03-20 14:21  安迪9468  阅读(208)  评论(0编辑  收藏  举报