Python中使用filter过滤列表的一个小技巧分享

2020-09-28 0 372

有的时候使用dir(Module),可以查看里面的方法,但是模块自带的属性\”__\”开头的也会显示,如下:

>>> import random
>>> dir(random)
[\'BPF\', \'LOG4\', \'NV_MAGICCONST\', \'RECIP_BPF\', \'Random\', \'SG_MAGICCONST\', \'SystemRandom\', \'TWOPI\', \'WichmannHill\', \'_Buil
tinMethodType\', \'_MethodType\', \'__all__\', \'__builtins__\', \'__doc__\', \'__file__\', \'__name__\', \'__package__\', \'_acos\', \'_c
eil\', \'_cos\', \'_e\', \'_exp\', \'_hashlib\', \'_hexlify\', \'_inst\', \'_log\', \'_pi\', \'_random\', \'_sin\', \'_sqrt\', \'_test\', \'_test_
generator\', \'_urandom\', \'_warn\', \'betavariate\', \'choice\', \'division\', \'expovariate\', \'gammavariate\', \'gauss\', \'getrandbi
ts\', \'getstate\', \'jumpahead\', \'lognormvariate\', \'normalvariate\', \'paretovariate\', \'randint\', \'random\', \'randrange\', \'sam
ple\', \'seed\', \'setstate\', \'shuffle\', \'triangular\', \'uniform\', \'vonmisesvariate\', \'weibullvariate\']
>>>

这个时候想过滤以\”_\”或\”__\”开头的方法,可以:

>>> filter(lambda s: not s.startswith(\"_\"), dir(random))
[\'BPF\', \'LOG4\', \'NV_MAGICCONST\', \'RECIP_BPF\', \'Random\', \'SG_MAGICCONST\', \'SystemRandom\', \'TWOPI\', \'WichmannHill\', \'betav
ariate\', \'choice\', \'division\', \'expovariate\', \'gammavariate\', \'gauss\', \'getrandbits\', \'getstate\', \'jumpahead\', \'lognormv
ariate\', \'normalvariate\', \'paretovariate\', \'randint\', \'random\', \'randrange\', \'sample\', \'seed\', \'setstate\', \'shuffle\', \'t
riangular\', \'uniform\', \'vonmisesvariate\', \'weibullvariate\']
>>>

从上面来看,使用filter()函数,结合lambda函数很好的完成了任务。 其他的例子,比如想从一个列表中过滤非数字的字符串列表:

>>> L = [\"1234\", \"ABCD\", \"BOOK\"]
>>> filter(lambda s: s.isdigit(), L)
[\'1234\']
>>>

补充知识:python不同长度列表,对应合并

1. 说明

lis1 = [{‘OS_bit\': u\'64 \\u4f4d\',
‘OS_version\': ‘10.0.10240\',
‘OS_name\': u\'Microsoft Windows 10 \\u4f01\\u4e1a\\u7248 2015 \\u957f\\u671f\\u670d\\u52a1\\u65b9\\u6848\'}]
lis2 = [{‘ip\':‘10.20.122.32\'}]
lis3 = [{‘CPU_name\': u\'Intel® Core™ i5-4200H CPU @ 2.80GHz\'}]
lis4 = [{‘memory_size\': ‘1600MHz\',
‘memory_name\': u\'Physical Memory 0\'},
{‘memory_size\': ‘1600MHz\',
‘memory_name\': u\'Physical Memory 2\'}]
lis5 = [{‘GPU_name\': u\'NVIDIA GeForce GTX 950M\',
‘GPU_size\': ‘2G\'},
{‘GPU_name\': u\'Intel® HD Graphics 4600\',
‘GPU_size\': ‘1G\'}]

有这五个列表,要求合并成一个列表,并且所有列表的第一元素放在新列表的第一元素,以此类推。

2. 代码

# !/usr/bin/env/python
# _*_coding:utf-8_*_
# Data:2019-04-10
# Auther:苏莫
# Link:QQ2388873062
# Address:https://blog.csdn.net/lingluofengzang
# PythonVersion:python2.7

import sys

reload(sys)
sys.setdefaultencoding(\'utf-8\')

lis1 = [{\'OS_bit\': u\'64 \\u4f4d\', 
 \'OS_version\': \'10.0.10240\', 
 \'OS_name\': u\'Microsoft Windows 10 \\u4f01\\u4e1a\\u7248 2015 \\u957f\\u671f\\u670d\\u52a1\\u65b9\\u6848\'}]
lis2 = [{\'ip\':\'10.20.122.32\'}]
lis3 = [{\'CPU_name\': u\'Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz\'}]
lis4 = [{\'memory_size\': \'1600MHz\', 
 \'memory_name\': u\'Physical Memory 0\'}, 
 {\'memory_size\': \'1600MHz\', 
 \'memory_name\': u\'Physical Memory 2\'}]
lis5 = [{\'GPU_name\': u\'NVIDIA GeForce GTX 950M\', 
 \'GPU_size\': \'2G\'}, 
 {\'GPU_name\': u\'Intel(R) HD Graphics 4600\', 
 \'GPU_size\': \'1G\'}]

is_all = [lis1,lis2,lis3,lis4,lis5]
#l print lis_all

new_lis = []
for j in range(2):
 lis = {}
 for i in range(len(lis_all)):
 try:
  lis = dict(lis, **lis_all[i][j])
 except Exception as e:
  pass
 # else:
 new_lis.append(lis)

print new_lis

3.结果

Python中使用filter过滤列表的一个小技巧分享

以上这篇Python中使用filter过滤列表的一个小技巧分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自学编程网。

遇见资源网 Python Python中使用filter过滤列表的一个小技巧分享 http://www.ox520.com/25465.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务