pta求阶乘序列前n项和_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

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

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

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

P2: Python 数据结构

P3: 使用 Python 访问网络数据

P4: Python 数据库开发

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

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

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

d1a5c0ce2a3421d857ce0f22214e6b6b.png

C6 String字符串

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

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

50a92b14035b618e8aaf1ce61fd9f4c9.png

常用字符串方法

85beeacffa0547c3c33b490eb1480c3f.png

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

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

acbcda7dec1dc8337fd7812f7ec3ec92.png

C7 Files 文件

1. File handle文件句柄

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

022e3dfba193b7e98190f0b34239423a.png

2. 按行处理文件

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

1) 打开文件open() 函数

fhandle

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

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

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

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

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

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

fhandle

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

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

8f3331e9bf4f8972e648e3792e2e7a90.png

C8 List列表

1. 列表

1) list有序、可变mutable

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

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

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

3) list与for循环

for 

34bff2c82f0a38ba1aaf41ed05133a90.png

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

1)针对list的内置函数:

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

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

331cbb459c52b4c5be0b714db96d5fa7.png

2)list.method()列表方法

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

c65999a4138e3aedd165f3c6255df174.png

常用列表方法

a3075895d2a369799c7540450b0e875b.png

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

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

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

b3f4bac45266a76c6ba11bd688f8fe50.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

创建字典

dictname

向字典里添加元素

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

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

3430e7c4583f49f23eb3c62b4bab9f21.png

39b47e8da6612ce2c5c561679ca65099.png

3.操作字典:长找换

051bca967456f65361fb0c6e20209d96.png

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

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

dic

25047ab84fbd99a7002b579e32563fda.png

14aade66bdabba21bf926fdc5bfb0cba.png

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

44455e63b1dd19bf179b4bf0a615f5e1.png

C10 Tuples元组

1. 定义

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

2. 操作元组

fb1e2f8aea6e8fd7b8bd3f00bbe41813.png

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

1)元组有可比性

e97f9bde2a0c61dda54f38b30b67e5a4.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里面的元组中的元素顺序相反

7180e3bdd5211162c08d5c0ab0f5e3c6.png
  • list comprehension列表推导式

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

a98ecc4dcd9a73ad8cfd787451a0e1e3.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值