小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Programming language
  4. Python
  5. 正文

Python语言程序设计(第6周)知识点整理

2018年4月18日 1820点热度 0人点赞 0条评论

第六周

6.1 集合类型及操作

1.集合类型的定义

集合是多个元素的无序组合,每个元素唯一,不存在相同元素。集合元素不可更改,不能是可变数据类型。这是因为,若集合元素可以改变,那么万一改变成和其它元素重复的,必然造成错误。

集合用大括号{}表示,元素之间用逗号分隔。建立集合类型有{}或set()。如果建立空集合,必须用set()。例如:

A={“python”,123,(“python”,123)}#使用{}建立集合

结果是:{‘python’,123,(‘python’,123)}

B=set(“pypy123”)#使用set()建立集合

结果是{‘1’,’p’,’2’,’3’,’y’}

2.集合操作符

集合间操作主要有:

(1)并:S|T

(2)差:S-T

(3)交:S&T

(4)补:S^T

表1.1 6个操作符

操作符及应用

描述

S|T

返回一个新集合,包括在集合S和T中所有元素

S-T

返回一个新集合,包括在集合S但不T中的元素

S&T

返回一个新集合,包括同时在集合S和T中的元素

S^T

返回一个新集合,包括集合S和T中的费相同元素

S<=T或S<T

返回True或False,判断S和T的子集关系

S>=T或S>T

返回True或False,判断S和T的包含关系

表1.2 4个增强操作符

操作符及应用

描述

S|=T

更新集合S,包括在集合S和T中所有元素

S-=T

更新集合S,包括在集合S但不T中的元素

S&=T

更新集合S,包括同时在集合S和T中的元素

S^=T

更新集合S,包括集合S和T中的费相同元素

 

3.集合处理方法

表1.3 集合处理方法

操作函数及方法

描述

S.add(x)

如果x不在集合S中,将x增加到S

S.discard(x)

移除S中元素x,如果x不在S中,不报错

S.remove(x)

移除S中元素x,如果x不在S中,产生keyError异常

S.clear()

移除S中所有元素

S.pop()

随机返回S的一个元素,更新S(删除该元素),若S为空产生keyError异常

S.copy()

返回S的一个副本

len(S)

返回集合S中元素个数

x   in S

判断S中元素是否有x,若有返回True,否则False

x   not in S

判断S中元素是否无x,若无返回True,否则False

set(x)

将其他类型变量x转变成集合类型

 

6.2 序列类型及操作

1.序列类型的定义

序列是具有先后关系的一组元素。它是一维元素向量,元素类型可以不同;类似数学元素序列s0,s1,…,sn-1。元素间由序号引导,通过下标访问序列的特定元素。

序列是一个基类类型。序列衍生出:字符串类型、元组类型、列表类型。

2.序列处理函数及方法

基本之前都讲过,这里只讲下面几个:

s.index(x)或s.index(x,i,j):返回s从i开始到j位置(省略i和j则是整个序列)中第一次出现x的位置。

s.count(x):是中出现x的总次数。

3.元组类型及操作

    元组是一种序列类型,但是它一旦被创建就不能修改。元组使用小括号()或者tuple()创建,元素之间用逗号分隔。在使用的时候,可以使用或不使用小括号。

4.列表类型及操作

元组是一种序列类型,但是它创建后能修改。它使用方括号[]或list()创建,元素用逗号分隔。可以使用或不使用小括号。

表2.1 列表类型操作函数和方法

函数或方法

描述

ls[i]=x

替换列表ls第i个元素为x

ls[i:j:k]=lt

用列表lt替换ls切片后所对应元素字列表

del   ls[i]

删除列表ls中的第i元素

del   ls[i:j:k]

很容易懂,不写了

ls+=lt

更新列表ls,将lt加到ls后面

ls*=n

更新列表ls,其元素重复n次

ls.append(x)

在ls后面增加一个元素x

ls.insert(i,x)

在ls第i个位置增加元素x

ls.remove(x)

将ls中出现的第一个x删除

ls.reverse()

将ls反转

 

5.序列类型典型应用场景

元组用于元素不改变的应用场景,更多用于固定搭配场景;列表更加灵活,它最常用的序列类型。

6.3 实例9:基本统计值计算

例:计算一组数据的总个数、总和、平均数、方差、中位数。

代码:

def getNum():
    nums = []
    iNumStr = input("请输入数字")
    while iNumStr !="":
        nums.append(eval(iNumStr))
        iNumStr = input("请输入数字")
    return nums
def getMean(numbers):
    s=0.0
    for num in numbers:
        s += num
    return s/len(numbers)
def dev(numbers,mean):
    sdev=0.0
    for num in numbers:
        sdev = sdev+(num-mean)**2
        return pow(sdev/(len(numbers)-1),0.5)
 
def median(numbers):
    sorted(numbers)
    size=len(numbers)
    if size %2 ==0:
        med = (numbers[size//2-1]+numbers[size//2])/2
    else:
        med = numbers[size//2]
    return med
 
n = getNum()
m=getMean(n)
d=dev(n,m)
med = median(n)
print("平均值是{0},方差是{1},中位数是{2}".format(m,d,med))

6.4 字典类型及操作

1.字典类型定义

字典类型是映射的体现,它通过键值对来体现,键是数据索引的扩展,字典是键值对的集合,键值对之间无序。采用大括号{}和dict()创建,键值对用冒号表示。例如:

d={“China”:”Beijing”,”France”:”Paris”}

输入

d[“China”]

结果是

’Beijing’

如果我们想生成一个空字典,则可以是使用

de={}

    直接用大括号只能生成字典!

2.字典处理函数及方法

表4.1 字典类型操作函数和方法

函数或方法

描述

del   d[k]

删除字典d中键k对应的数据值

k   in d

判断键k是否在字典d中,在就是True,否则False。k是索引

d.keys()

返回d中所有的键信息

d.values()

返回d中所有的值信息

d.items()

返回d中所有键值对信息

d.get(k,<default>

键k存在,则返回相应值,否则返回<default>值

d.pop(k,<default>)

键k存在,则取出(并删除)相应值,否则返回<default>值

d.popitem()

随机从字典d中取出一个键值对,以元组形式返回

d.clear()

删除所有键值对

len(d)

返回字典d中元素的个数

 

6.5 模块5:jieba库的使用

jieba是优秀的中文分词第三方库。jieba分词有三种模式:精确模式、全模式、搜索引擎模式。

精确模式:把文本精确的分开,不存在冗余单词。

全模式:把文本中所有可能的词语都扫描出来,有冗余。

搜索引擎模式:在精确模式基础上,对长词再次切分。

表5.1 jieba库常用函数

函数

描述

jieba.lcut(s)

精确模式,返回一个列表类型的分词结果。

jieba.lcut(s.cut_all=True)

全模式,返回一个列表类型的粉刺结果,存在冗余。

jieba.lcut_for_search(s)

搜索引擎模式,返回一个列表类型的分词结果,存在冗余。

jieba.add_word(w)

向分词词典增加新词w

 

6.6 实例10:文本词频统计

1.Hamlet词频统计:

def getText():
    txt = open("hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格
    return txt
 
hamletTxt = getText()
words  = hamletTxt.split()
counts = {}
for word in words:          
    counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
    word, count = items[i]
print ("{0:<10}{1:>5}".format(word, count))

2. 《三国演义》人物出场统计(下)(含《三国演义》原文文本)

import jieba
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1
for word in excludes:
    del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Python python学习
最后更新:2018年4月18日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
15年7月到16年1月学习暨考研第一阶段安排 《实时语音处理实践指南》学习笔记:第一章 day7练习2:使用管道实现兄弟进程间通信 [leetcode]n queens ii 莱芜市2012年普通高中招生工作实施意见2 网络技术与应用(计算机网络体系结构和协议)知识点整理
标签聚合
学习 算法 Python 生活 鸟哥的linux私房菜 高中 Java linux leetcode python学习
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号