序列类型: 字符串str,元组tuple 列表list
正向序号:01234;反向:-1(倒数第一个) -2…
操作符:
s*n:序列s复制n次
s.index(x[,i[,j]]): 序列s中从i位置到j位置中间第一次出现x的位置
s.count(x) : 序列中出现x的总次数
元组一旦创建就不能被修改。一般用于表达固定数据项、函数返回值、多变量同时赋值、循环遍历等情况。
创建:
tuple([1,2,3])
tuple('python')
st = 'num','name','job'
course = ('math','english','sport')
info = ('name','num','job',course)
与元组不同,列表的长度和内容都是可变的,可自由对列表中的数据项进行增加、删除或替换。列表没有长度限制,元素的类型可以各不相同。
list('python')
# ['p','y','t','h','o','n']
tp = (1,2,3)
list(tp)
# [1,2,3]
ls = [11,'aa',['red','green']]
# ls[2][0] --->'red'
# 简单赋值的后果,改1变2
ls = [11,'22',['red','green']]
lt = ls
ls[1] = 'ppp'
# 打印lt 得到:[11,'ppp',['red','green']]
如果非要将一个列表的值赋给另一个变量,可通过复制的方式实现:
ls = [11,'22',['red','green']]
# 生成新列表,复制ls中所有元素
lt = ls.copy()
ls[1] = 'ppp'
# # 打印lt 得到:[11,'22',['red','green']]
操作符:
ls.extend(lt) 或者 ls+=lt :将lt元素加到列表ls中
ls+=n:更新列表ls,元素重复n次
ls.pop(i):列表ls中第i个元素取出并删除,返回剩下的列表ls
ls.remove(x) :删列表的元素,返回剩下的ls (注意pop,remove传的参数不一样!)
增删改查操作
lt = ['cat', 'dog', 'tiger', 111]
lt[1:2] = [1, 2, 3, 4]
print('此时lt:', lt)
# "初始:结束:步长" 删除部分包括初始和结束
del lt[::3]
print('删除后此时lt:', lt)
# 更新需要=;如果只是lt*2打印内容并未更新lt
lt *= 2
print('乘2后此时lt:', lt)
lt += ['a', 'b', 'c', 'd', 'e']
print('增加后此时lt:', lt)
打印结果:
此时lt: ['cat', 1, 2, 3, 4, 'tiger', 111]
删除后此时lt: [1, 2, 4, 'tiger']
乘2后此时lt: [1, 2, 4, 'tiger', 1, 2, 4, 'tiger']
增加后此时lt: [1, 2, 4, 'tiger', 1, 2, 4, 'tiger', 'a', 'b', 'c', 'd', 'e']
对元素操作:
ls = [1, 2, 3, 4, 5, 6, 7]
ls.append(10)
print('+10以后此时ls:', ls)
# 在1位置插入30
ls.insert(1, 30)
print('插值后ls:', ls)
ls.reverse()
print('反转后ls:', ls)
ls.sort()
print('排序后ls:', ls)
ls.sort(reverse=True)
print('降序排序后ls:', ls)
sum(ls)
print('ls求和:', sum(ls))
结果:
+10以后此时ls: [1, 2, 3, 4, 5, 6, 7, 10]
插值后ls: [1, 30, 2, 3, 4, 5, 6, 7, 10]
反转后ls: [10, 7, 6, 5, 4, 3, 2, 30, 1]
排序后ls: [1, 2, 3, 4, 5, 6, 7, 10, 30]
降序排序后ls: [30, 10, 7, 6, 5, 4, 3, 2, 1]
ls求和: 68
列表元素遍历
注意:
例:对列表元素求平均值
分析:对列表中的每个元素进行访问,对它们的值进行累加,再将累加结果除以列表长度即可得到列表的平均值。在这个过程中,不需要改变元素的位置,可以直接对列表进行遍历
ls = [1, 2, 3, 4]
sum = 0
for i in ls:sum+=i
print('列表元素平均值:',sum/len(ls))
例:删除3的倍数。
指定列表[23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]中,请将其中所有为3的倍数的元素删除,并输出剩余的元素及删除元素的个数
分析:。一旦涉及元素的删除,就会导致列表的元素索引号发生改变,为保证每个元素都能被遍历,故需要先复制列表,在复制的列表中遍历,在原列表中删除。
代码:
ls = [23, 45, 78, 87, 11, 67, 89, 13, 243, 56, 67, 311, 431, 111, 141]
lt = ls.copy()
count = 0
print('删除后列表元素是', end=' ')
for i in lt:if i % 3 == 0:ls.remove(i)count += 1else:# 注意end里 空格print(i, end=' ')
print('\n 一共删除{}个元素'.format(count))
结果:
删除后列表元素是 23 11 67 89 13 56 67 311 431一共删除6个元素
s1 = {100, 'fff', 20.6}
print('{}方式创建的s1:', s1)
# set()参数为字符串
s2 = set('python')
print('set方式创建的s2:', s2)
# set() 参数为元组
s3 = set(('python', 123))
print('set方式创建的s3:', s3)
结果:
{}方式创建的s1: {'fff', 100, 20.6}
set方式创建的s2: {'o', 't', 'n', 'h', 'p', 'y'}
set方式创建的s3: {'python', 123}
注意:空集合只能由set()函数创建。空{}创建的集合默认为字典类型
映射类型是键-值数据项的组合,每一个元素都是一个键-值对,即元素是(key,value),元素之间是无序的。键-值对(key,value)是一种二元关系,源于属性和值的映射关系.这种通过任意键信息查找一组数据中值信息的过程称为映射,在Python中,映射类型主要以字典(dict)进行体现.
字典操作
d.keys() :返回所有键信息;
d.values() : 返回所有值信息
d.items() : 返回所有键-值对
d.get(key,default): 键存在返回相应的值,不存在返回默认值 (注意:传入的是key,返回的是value!)
del d[key] :删除字典d中某一个键-值对
注意:
如果希望以keys()、values()、items()方法返回列表类型,可用list()函数进行转换
字典遍历
例:计算消费额
小明在咖啡店里点了双人下午套餐,包含两杯咖啡和两份点心:一杯卡布奇诺32元,一杯摩卡30元,一份抹茶蛋糕28元,一份布朗尼蛋糕36元,请帮忙用Python计算并输出消费总额
menu = {'coffee': 38, 'coffee2': 30, 'cake': 28, 'cake2': 26}
total = 0
for key in menu:total += menu[key]
print('一共消费{}元'.format(total))
例:词频统计
词频统计本质就是词语数量的累加问题,对每个词语设计一个计数器,每出现一次,相应地计数器就加1。因为一篇文章中的词语量比较大,为避免词语计数器发生混乱,可以将词语与相应的计数器组成一对键-值
步骤:
第1步,获取英文文本。内容存储在文本文件中,此处需要用到后续博客的文件打开与读取方法。打开文件:open(文件名,打开方式),读取全文:read()。
第2步,统一大小写。由于同一个单词会存在大小写不同的形式,但计数时应该不区分大小写,将它们归为一个单词。统一转换为小写:lower()。
第3步,去掉标点符号。标点符号不参与计数,为避免标点符号对分词造成影响,需要将原文中的各类标点符号用replace()方法替换成空格。
第4步,提取单词。利用相应的方法将单词进行分解并提前,英文文本以空格或标点符号来分隔词语,获得单词并统计数量相对容易。统一用空格来分离单词:split()。
第5步,创建字典,用于存储词语及对应的计数器。
第6步,遍历文本,对计数器值进行修改。计数器值的变化就是对值进行修改,而修改是在原有的基础上进行加1,则可以使用字典的
“d.get(key,default)+1”方式实现,如果词语在字典中已存在,则获得原有值,在这个值的基础上加1,如果这个词语不存在,则将它的默认值设为0,表示第1次出现。
第7步,字典转换为列表,按词频排序。由于字典是无序的,如果要显示词频最高的词语,需要先转换为序类型,才能实现排序。转换函数:list(),排序函数:sort(),字典转换为列表后是一个二元关系,即二维列表,排序需要使用key属性,使用lambda函数指定排序的依据。
第8步,遍历列表,输出词语及词频。按需要将前10个高频词及次数输出。
代码:
# 词频统计
def get_text():file = open()text = file.read()text = text.lower()for char in '!"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~':text = text.replace(char, ' ')return texttxt = get_text()
words = txt.split()
counts = {}
for w in words:counts[w] = counts.get(w, 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("{:<12}{:>5}".format(word, count))