keil obj 文件 结构_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

dd38d1c0923f1a7055a26c4c871d6453.png
  1. 这是密歇根大学课程Python For Everybody总结的P2部分。课程总结P1部分的地址如下:

P1: 零基础程序设计(Python 入门)

carolinezhq:【Python】数据分析前的入门教程 Python For Everybody P1:零基础程序设计​zhuanlan.zhihu.com
567304ad318ea47b8ecb5cd7561c45c0.png

P2: Python 数据结构

P3: 使用 Python 访问网络数据

P4: Python 数据库开发

P5: 毕业项目:使用Python获取并处理数据,并用可视化方式展现数据

2. 编程包含两方面,一是Algorithms算法:解决问题的一系列规则/步骤;二是Data Structures数据结构:在电脑上组织数据的方式。

P2部分的主要内容就是Python的数据结构:列表、字典与元组,以及怎么用它们来进行文件处理。P2总体逻辑结构上我动得还挺多的,欢迎小伙伴交流,点赞和收藏呀,我还会持续更新的~

d540e869877a2338c08b564c434695c0.png

C6 String字符串

1. str.method()字符串方法

06171d503956cdc4ab10c688f5fde512.png
  • 字符串方法: string library里处理字符串的一系列内置函数。
  • str.method()返回修改后的新字符串,但是并不改变原字符串
  • 查看字符串可用方法:dir(str)

6010f607e66104c3d1e75c5e917b4152.png

常用字符串方法

e3a99b9af195bcaa89dbf92e9c804560.png

*whitespace空白:所有不显示的space/tab/newline

2. 操作字符串:长找分合换

599adfec09a6bc24bbf5444cb805088a.png

C7 Files 文件

1. File handle文件句柄

  • 文本文件是由行组成的,每一行结尾都有一个newline character换行符 n,n是看不见的字符,其类型为str,是一个字符而不是两个,len("n")结果为1
  • filehandle是open()函数返回的变量,用于按行操作文件,需为filehandle命名,print(filehandle)不显示文章实际内容
  • 可以将文件句柄视为一个字符串序列a sequence of strings,文件中每一个以“n”结尾的行都是这个序列中单独的字符串。

dcc406d61770eaad6137380503b6e7cb.png

2. 按行处理文件

  • 这种处理方法将每一行当做一个str

1) 打开文件open() 函数

fhandle=open(filename)
#或者
fhandle=open(filename,mode)
# mode可省。'r'表示只读;'w'表示编辑。不要忘记引号!

2) 对文件进行按行打印/对行计数/查找行

fhandle=open(filename)
for line in fhandle:
    line=line.rstrip()
    statement
  • 用str.rstrip()处理多余的n:文本每一行本身后面就有一个n结尾,在打印的时候由于for循环,会在后面自动再加一个n,所以打印出的结果行中间穿插有空行。用line=line.rstrip()删去n。这是一个非常常用的代码

d40d5235c5fd6f0b298bd93658c9395b.png
  • 在statement做文章,可以完成对问文档按行打印/对行计数/查找行(可能会用到count=count+1计数;str.startswith()筛选行、continue跳过不需要的行、用in查找包含某字符串的行等)

3. 把文件视为一整个字符串进行处理

  • 这种方法将整个file当做一个str(newline和其他符号也包括在内),因此不适用于过大的文件;如果文件过大,如几百万行,还是按行读比较好

1)读取文件filehandle.read()方法

fhandle=open(filename)
strname =fhandle.read()
statement

2) 利用statement完成按字符打印/文本字符计数/查找字符(和C6对str的操作一致)

  • 按字符打印:print(strname
  • 文本字符计数:直接用len(strname)计数文件有多少字符(这样会计入所有的字符,比如n)。
  • 查找字符:切片。print(strname[位置1:位置2])打印切片(实际上位置1、2并不好找)

37bd0277d064b6e49c98399ebc6881b0.png

C8 List列表

1. 列表

1) list有序、可变mutable

  • 形式: 中括号+逗号 listname=[a,b,c]
  • 列表里的元素可以是Python里的任何object对象,甚至是其他列表;列表可以为空[]
  • 字符串immutable不可变,不能改变字符串的内容,若需改动,需重新赋值;列表mutable可变,用索引操作符可以改变列表里的元素。
#创建list
listname=list()
#或
listname=[]

#修改列表元素
list[位置]=newobj

2)range(n) 返回由0到n-1的整数数字构成的迭代对象

  • Python 3中range(n)函数返回迭代对象range(0,n)而不是列表;把迭代对象放在像list这样的迭代器里面,才能成为列表
print(range(5))  #range(0,5)
print(list(range(5)))  #[0,1,2,3,4]

3) list与for循环

for obj in list:
    statement
#或者
for i in range(len(list)):
    statement

65af327dfc6d5266d8df0d65297fee9a.png

2. 列表函数及list.method()列表方法

1)针对list的内置函数:

  • min(listname)/max(listname)/sum(listname)

求平均数时,循环的两种写法,右边在计算之前要把所有数据存起来,更占内存。

a14fe67d06ee774954e5eb2e3d3b1ef9.png

2)list.method()列表方法

  • 查看列表可用方法:dir(list)

9e00c17fef5de665b473b97c6869d95c.png

常用列表方法

fe6be47d8c87f0d02b7b7d5ee3fb410f.png

list.append(obj) 在列表末尾添加元素

  • 可添加各种数据类型/数据结构,但是一次只能添加一个元素(列表实参)
  • 字符串记得加引号
  • 注意:给列表添加元素时,list=list.append(obj)是错误的,会返回None;list.append(obj)就可以直接改动列表本身,print(list)直接就是新列表。相比之下,由于str不可变str.method()不改变原有字符串,需要用赋值的方式str=str.method()替换旧变量才能起到改变的效果。

3.操作列表:长找分合换

4363cd7c67aaf74a5a30ed5a5036143a.png

4.str转list:str.split()方法

listname=list()
listname=str.split()
#默认分隔符为whitespace(space/tab/newline)
 
#或者自己定义分隔符delimiter是什么
listname=list()
listname=str.split(delimiter)

实例:对于一个长字符,想取出其中的一段字符串

  • 法1:find找出首尾位置1、2;str[位置1,位置2]切片
  • 法2:str.split()利用特殊分隔符str转list;list[位置]索引

C9 Dictionary字典

1.字典dictionary:python最强大collection

  • 存在于很多语言中,只是名字不一样。如perl/php: associative arrays关联数组。字典可改,无序,靠key进行索引。
  • 字典的组成Dictionary Literals(Constants):curly braces花括号+a list of keys: values pairs。基本形式dictname={key1: value1,key2: value2}。

创建空字典

dictname=dict()
#或者
dictname={}

创建字典

dictname={key1: value1,key2: value2,…}
#或者
dictname[key1]=value1
dictname[key2]=value2
…

向字典里添加元素

dictname[newkey]=newvalue
#如果是写了已经有的key,就变成修改该key的键值了
  • 字典里的1)value键值不需要唯一;而键必须保持唯一,如果同一字典内添加的键出现了重复,后面的键值会替换前面的键值,最终只保留最后一个键值;2)可以取任何数据类型;但必须是不可变的,如字符串,数字或元组,键不能取列表。

2. 常用dict.method()字典方法

0dceb6679c8f2af51b6ee0cb9af689b0.png

4f8fa5d80b6bada17498b83e66bf7fa7.png

3.操作字典:长找换

2cf0d8396105fc1ed30568fa654fd751.png

4. 实例:统计文件中每个词出现的频数

1)用dic[obj]=dic.get(obj,0)+1一次性完成计数和赋值(常用idiom)

dic=dict()
for obj in list:
    dic[obj]=dic.get(obj,0)+1
print(dic)
#注意:由于字典是无序的,所以最终统计出来的词频也是无序的。

b8219b81397327f7295b4b28b35c30b2.png

9feb4c6f7c0ed4922ad22e6ea501f1cb.png

2)实例:统计文件中出现次数最多的词及其频数(C10利用元组的比较来为无序的字典排序,蓝色部分会更加精简)

feb69e9b3effe0fe3a021976e5e114e5.png

C10 Tuples元组

1. 定义

  • Tuples元组有序不可更改。基本形式是圆括号+逗号隔开,
tuplename=(obj1, obj2, obj3…)
  • tuples and assignment元组可以同时给多个对象赋值(注意赋值之后元组不能改!)。可以把元组放在赋值符号的左边(python 特别好的功能),甚至可以省略括号。下面例子要保证赋值左右元素数量相等
# 元组可以同时给多个对象赋值
a,b,c,d=(2,3,4,5)
print(c)  #4
#2,3,4,5直接就一对一赋值给了a,b,c,d
  • tuples的出现是为了提升效率,它们储存空间小,访问速度快。如果只是想储存一个list,看一下丢掉,用tuple更好。

2. 操作元组

5ac43f9f584202cd63c450b9c4210c34.png

3. 利用元组的可比性给字典里的元素排序

1)元组有可比性

ab95abdd6d3dd9a1821a1aacae2cca3b.png
  • 从左边开始,只要有一对对应位置的元素满足条件,就返回True,后面的元素根本不比较。如果第一对元素结果为False,就继续比较下一对元素,以此类推,直到返回True就立刻停止比较。
  • 字符串的比较:如Sally和Sam开始Sa一样,但是l在m前面,所以'Sally'<'Sam'。只对比到有第一个明确的答案出现就停止

2)sorted(iretable)函数 vs. list.sort()方法

sorted(iretable)  #默认False升序
#或者
sorted(iretable,reverse=False升序/True降序)
  • sorted(iretable)函数适用于所有可迭代变量;而list.sort()方法仅使用于列表

3) 利用tuples的可比性和sroted()函数给字典里无序的元素排序

实例:求出文件里出现频数前10的词及其频数(P2所有章节代码综合应用)

  • 注意top10比的是元组(value,key),和dict里面的元组中的元素顺序相反

151884268d02a6033a3e679c97dae5e1.png
  • list comprehension列表推导式

上面C10部分对应的代码还有列表推导式的写法:更短,执行起来更高效

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值