博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的列表数据_python中的列表解析与列表,字典,集合筛选数据
阅读量:7000 次
发布时间:2019-06-27

本文共 2965 字,大约阅读时间需要 9 分钟。

python中的列表解析与列表,字典,集合筛选数据

1.列表list

from random import randint

data = [randint(-100,70) for i in range(12)]

print(data)

randint()生成指定范围下(-100,70)的指定个数为(12)的随机数

其中i 可以是其它字母(x,y,z,...都可以),代表每次被迭代的数,打印如下

>>> data

[62, -1, -9, 17, -93, -62, -31, -91, -31, -20, -62, 11]

1.1普通方法

先用普通方法来看看筛选出大于0的

res = []

for x in data:

if x>= 0:

res.append(x)

print(res)

结果如下

>>> res

[62, 17, 11]

1.2列表解析

现在用列表解析的方式筛选出大于0的,对比一下

print([x for x in data if x >= 0])

print(data)

结果如下

>>> [x for x in data if x >= 0]

[62, 17, 11]

>>> data

[62, -1, -9, 17, -93, -62, -31, -91, -31, -20, -62, 11]

我们可以看到data其实并没有变化

我们来看一下列表解析这种结构[x for x in data if x >= 0]

再做一个小实验

>>> [x+3 for x in data if x >= 0]

[65, 20, 14]

我们把x换成了x+3,打印的每一项里也+3了,也就可以更好的理解这其中的原理了

其实这个列表解析具体来说再执行过程中分了3个步骤:

1.通过for x in data来遍历data

2.加入if语句if x >= 0来筛选

3.通过x+3这样一个表达式来循环输出到空列表[]中

1.3 Filter函数

1.3.1 lambda表达式

在这之前我们有必要了解一下lambda x: x >= 0这是什么东西

lambda表达式其实就是匿名函数,其中:

冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。

在此例中x即为参数 x >= 0为返回值。我们再来看一个稍微复杂的例子:

lamxy=lambda x,y: x*y*x

lamxy(2,1)

优点:

1.一个函数只会使用一次的话,比较简洁,不用多定义了一个函数

2.lambda表达式可以和filter map结合使用

1.4 总结

就所用时间来说:列表解析

1.3.2 使用filter函数

>>> filter(lambda x: x >= 0,data)

[62, 17, 11]

filter,可以理解成过滤

filter函数会对data中的每个元素调用lambda函数,最后返回调用结果为true的元素,

在这里,即是x >=0元素。

注意上面是python2下的结果,python3中filter函数返回的是一个对象,需做类型转换,如下

res = filter(lambda x: x >= 0,data)

print(list(res))

这样在python3中打印出[62, 17, 11]的结果

2 集合set

python2下

>>> data

[62, -1, -9, 17, -93, -62, -31, -91, -31, -20, -62, 11]

>>> s = set(data)

>>> s

set([-31, -62, -93, -91, 11, -20, 17, 62, -9, -1])

>>> {x for x in s if x % 3 == 0}

set([-93, -9])

python3下

>>> s = set(data)

>>> s

{-31, -62, -93, -91, 11, -20, 17, -1, -9, 62}

>>> {x for x in s if x % 3 == 0}

{-93, -9}

这里我们还是用上一小节的data,可以看到set()方法有明显区别,python2下转化成了元祖,有点不好理解。python3下则转化为了集合,而集合的定义是:由不同元素组成的集合,故只有10个集合元素(另外2个因为重复,被去掉了)

1.{x for x in s if x % 3 == 0}的理解和上面的列表解析list是一样的

2.有区别的是这里因为是集合set,所以外面是{ }包起来的

3.x % 3 == 0是指能被3整除

3 字典dict

再打开一个新的文件

代码如下:

from random import randint

data ={x: randint(80,100) for x in range(1,9)}

print(data)

print({x for x in data if x >= 6})

#python3中不再有iteritems() ,用items()代替python2中的iteritems()方法

print({key: value for key,value in data.items() if value > 90})

打印结果如下:

{1: 87, 2: 82, 3: 82, 4: 95, 5: 100, 6: 86, 7: 94, 8: 100}

{8, 6, 7}

{8: 100, 4: 95, 5: 100, 7: 94}

可以这么理解range(1,9)是指学号1到学号8的学生,而他们的成绩randint(80,100),是80分到100分的随机分数,x: randint(80,100)这种字典键值对可以理解为成绩表,格式为学号: 成绩

{key: value for key,value in data.items() if value > 90}中

1.字典里的items()方法是 返回可遍历的(键, 值) 元组数组,看个例子:

dict = {'Sex': 'man', 'Age': 999}

print (dict.items())

for x in dict.items():

print(x)

for key,value in dict.items():

print(key,value)

>打印结果:

>```

dict_items([('Sex', 'man'), ('Age', 999)])

('Sex', 'man')

('Age', 999)

Sex man

Age 999

if value > 90 筛选90分以上的成绩

key: value 可以理解为列表解析后字典里每个元素的格式

得到90分以上的成绩表

6a62f4405229?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

参考慕课的python课程

:)

来个复杂的,list a=[2,3,4,5]; list b=[3,4,5,6],想要得到a,b对应位的乘积:

[i*j for i,j in zip(a,b)]

>除了列表解析,还需要使用zip函数来帮忙,zip将a,b对应位打包起来,返回[[2,3][3,4][4,5][5,6]]

转载地址:http://zbevl.baihongyu.com/

你可能感兴趣的文章
网站算法石榴算法严厉打击下 网站盈利方向何在
查看>>
C preprocessor macro specialisation based on an argument
查看>>
iOS 播放声音 最简单的方法
查看>>
PostgreSQL在何处处理 sql查询之三十三
查看>>
C#中datatabel导出excel(三种方法)
查看>>
【转载】如何使用assert_param
查看>>
最小距离问题
查看>>
Ubuntu中MySQL安装与使用笔记
查看>>
css3圆角代码
查看>>
标准库string的用法探讨
查看>>
Android--解析XML之SAX
查看>>
c#文件操作
查看>>
HDUOJ----专题训练C
查看>>
面向服务的体系结构(SOA)——(4)对于服务的理解
查看>>
Linux网络设置1——Linux网络环境配置
查看>>
hdu 2112 HDU Today (floyd算法)
查看>>
找工作--Java相关
查看>>
paxos 实现
查看>>
网站框架策划时的小技巧--页面原型篇
查看>>
linux驱动移植的重要数据结构
查看>>