Python 轻松学会写程式笔记-第4节56-清单的筛选

最终程序

data = []
with open('reviews.txt', 'r') as f:
	for line in f:
		data.append(line)

new = []
for d in data:
	if len(d) < 100:
		new.append(d)
print('一共有', len(new), '笔留言长度小于100')
print(new[0])
print(new[1])

good = []
for d in data:
	if 'good' in d:
		good.append(d)
print('一共有', len(good), '笔留言中含有good')
print(good[0])

在这里插入图片描述

筛选

例如说我们现在有一百万笔留言
我想要知道有多少留言是长度小于一百个字的
那我是不是要做筛选

这一百万笔呢 每一笔拿出来 你有没有小于一百个字
有 好 你过来
第二笔你有没有小于一百个字
没有 快去快去
第三笔你有没有小于一百个字
有 你过来你过来
这就是筛选

那我们怎么把这样的想法写成程式码
这个就是写程式的难度难点
你们可以慢慢体会
难度呢 其实不是在写这些什么 逗点 分号这种语法 语法都满简单的
难度都其实都是在 你把你想要做的事情 逻辑化 用正确的语法转换出来

你们直接看我写出来第一遍 你们就马上明白(接上一节的程序)

我先写一个new清单好了 new 新的清单的意思 他是空白的
那我写for d in data 就是data这个清单裡面的一笔一笔数据叫出来
他裡面有一百万笔 那每一笔叫出来我都把你叫做d 所以这个每一个d是一个留言 而data是装著一百万笔的清单 d是字串 data是清单

new = []
for d in data:

你一定要很清楚每一个东西是什么 不然你等一下在写的时候 你要语法都会打错

那每一个留言叫出来之后 我们要干嘛 要问问题 你的长度有没有小于一百?
If你的长度小于一百 我就把你装进这个新清单裡面
New点append d
d是留言 我不是加data data是整个清单 那不对
我装进New裡面 如果你的长度有小于一百 我就把你装进新的清单
我就做完筛选了

最后 印出new的长度 我就知道有几笔资料了
一共有这么多笔留言长度小于一百

new = []
for d in data:
	if len(d) < 100:
		new.append(d)
print('一共有', len(new), '笔留言长度小于100')

这裡是一个字串 然后一个整数 一个字串 我们分了三个部分来印 中间都用逗点分开 很多人都会忘了用这个逗点 印不同的东西 要用逗点分开

为什么print要和for齐平
如果根new.append齐平的话 就等于说在for loop的裡面了 那就变成说他会一直印 我不要他一直印 我只要他印一次 我要他for loop执行完我才印 所以我要把他推到最和for齐平 你这整个for loop都做完了 我们才会走到第print这一行 然后我才印一次而已 这是为什么我把他前面的空格都删掉

执行

一共有 21741 笔留言长度小于100

一百万笔裡面有两万笔小于一百个字
可是他这个字不是像我们中文字 因为我们的留言是英文的 他所谓的字指的是符号 就每一个字母
譬如说the 是三个字

new = []
for d in data:
	if len(d) < 100:
		new.append(d)
print('一共有', len(new), '笔留言长度小于100')

这就是筛选
你先写一个for loop来一笔一笔读取原本的资料
Data就原本的一百万笔
然后呢 如果符合你想要的条件 譬如说长度小于一百 你就把他装进去新的清单裡面
所以我们现在就有两个清单 data裡面是一百万笔的 new裡面是两万笔的

印筛选完的东西看看

print(new[0])
print(new[1])

随便来印一笔资料
我再in一个new 0 New中括号0 就是我把new这个清单的第一笔留言in出来 我嘴巴讲1可是我写0有没有 因为清单你记不记得他从0开始 那个索引标籤 就像火车的车厢 你明明你那个车票很奇怪 车票写第零节车厢 很像恐怖列车 第零节车厢

执行

他肯定长度会小于一百 因为这是我们筛选完的
Well the price of this watch is 23 dollars But it is better to add extra and buy better product

再来new 1
再in一笔看看好了

再执行

The halo is ok The picture included more colors that the actual product It did arrive quickly

建立版本上传

把他上传到GitHub 这个版本可以做筛选的
add filtering function
git push origin master

我才写一点点程式码 可是我加了一个新的功能对不对
我们的程式码这边加了一个新的功能 做筛选
我就赶紧赶快把他新的版本 上去到GitHub去 这就是最良好的做法
你们就了解 原来写程式其实是这样 不是写一大堆 写了三天三夜 才把档案放到dropbox去
我们是写一点就到GitHub去 不是到dropbox 不是到google drive 也不是到Microsoft的one drive

另外一个筛选案例

为了要加深大家对筛选的概念 写另外一个筛选的程式码

这一次我们把留言裡面有提到good这个字的留言筛选出来
做法其实跟刚刚这个几乎一模一样

我们依样画葫芦就好了
我建立一个新的清单叫做good 这个good清单准备要装著所有有提到good的留言了
那一样 我要有一个for loop
For d in data
来一笔一笔存取我们的一百万笔留言
那每一笔叫什么 叫做d 这个是用来称呼每一笔留言的变数名称
如果good这个英文字有在d裡面 我就把你装进good清单

good = []
for d in data:
	if 'good' in d:
		good.append(d)
print('一共有', len(good), '笔留言中含有good')
print(good[0])

If good这个字串有在d(留言也是字串)我就把你装进good清单

'a' in 'abc' -> True
'1' in 'abd' -> False

譬如说a有没有在abc裡面 他就运算成true 这个字串有在这个字串裡面
1有没有在abc裡面 他就没有 他就变false
if后面一定都接是非题
if后面一定都要变成true或false

我们来看有多少个留言
一共有Len good笔留言提到good

执行

一共有十六万笔提到good

我们来in一笔看看
Good 0
in出他的第一个留言
我嘴巴讲第一个 其实写的时候写0 因为清单他从0开始

执行

一共有162550笔提到good
I really love this ringIt fits well
那么in出第一笔留言了 好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值