【Python实践笔记】000AH Python组合数据类型

在这里插入图片描述
图片来源于turtle库的练习


共勉:纸上得来终觉浅,绝知此事要躬行。



1. 字符串和元组


TBD.


1.1 Python变量的指针本质


TBD.


1.2 字符串


1.2.1 转义字符


TBD.


规定 ‘\’ 不转义的字符串

print(r’ab\ncd)
r 表示字符串里面的\就是\,不会和后面的字符合并起来看待


1.2.2 字符串切片


a[x:y:z]表示,从a[x]取到a[y](a[y]不算),每z个字符取一个,最后拼起来。
z为负数则代表倒着取
x,y可以省略。x,y全省略表示从头取到尾或从尾取到头

print("1234"[3:1:-1])  #>>43
print("abcde“[::-1])   #>>edcba   可用于字符串反转
print("12345678"[1:7:2]) #>>246
print("12345678"[7:1:-2]) #>>864

字符串切片的用法也适用于元组和列表!


1.2.3 字符串的分割


s.split(x)
两个相邻的分隔符之间会被分隔出一个空串

a = "12..34.5346...a"
print(a.split(".")) #>>['12','','34','5346','','','a']

1.2.4 字符串的高级分割


用多个分隔串进行分割,要引入re(正则包)

import re
a = 'Beautiful, is; better*than\nugly'
print(re.split(';| |,|\*|\n',a))  #分隔串用|隔开,‘;’ ‘ ’ ‘,’ ‘*’ ‘\n’都被看作是分隔串

#>>[‘Beautiful’, ’ ', ‘is’, ’ ', ‘better’, ‘than’, ‘ugly’]


1.2.5 字符串函数


  • count 求子串出现次数
  • len字符串长度
  • upper, lower大小写转换
  • find, rfind, index, rindex 在字符串查找子串,返回找到的位置(下标)。找不到的话,find返回-1,index引发异常
  • find还可以指定查找的起点
  • replace替换
  • isdigit判断是否全是数
  • islower, isupper判断是否全是小写、大写
  • startwith, endwith判断是否以某子串开头、结尾
  • strip()返回除去头尾空白字符(空格,’\r’ ‘\t’ ‘\n’)后的字符串
  • lstrip()返回除去头部(左端)空白字符串后的字符串
  • rstrip()返回除去尾部(右端)空白字符串后的字符串

1.2.6 字符串的编码


字符串的编码在内存中的编码都是Unicode的,虽然写入文件时可能是gbk或者utf-8的


1.2.7 字符串格式化


参考之前的博文。


1.3 元组


一个元组由数个逗号分隔的值组成,前后可加括号
元组不能修改,即不可增删元素,不可对元素赋值,不可修改元素顺序(如排序)

t = 12345, 54321, 'hello!'   #t是一个元组
print(t[0])                  #>>12345
print(t)                     #>>(12345, 54321, 'hello!')
u = t, (1, 2, 3, 4, 5)       #u有两个元素,都是元组
print(u)                     #>>((12345, 54321, 'hello!'), (1,2,3,4,5))
print(u[0][1])               #>>54321
print(u[1][2])               #>>3
t[0] = 88888                 #运行错误,元组的元素不能赋值

1.3.1 元组元素的指针本质


元组的元素都是指针。元组元素不可修改,是指不可改变元组元素的指向,但是元组元素指向的内容,是有可能被修改的
例如:如果元素时列表,就可以修改该列表

v = ("hello", [1,2,3],[3,2,1])  #[1,2,3]是列表
v[1] = 32 #运行错误,元组元素不可能修改成指向别的
v[1][0] = 'world'  #可以
print(v)  #>>('hello', ['world',2,3], [3,2,1])
print(len(v)) #>>3

1.3.2 单元素的元组


empty = ()   #空元组
singleton = 'hello',  #注意末尾的逗号,如果没有,就不是元组而是字符串了
print(len(empty)) #>>0
print(len(singleton)) #>>1
x = ('hello',)  #无逗号则x为字符串
print(x)  #>>('hello',)

1.3.3 元组赋值


x = (1,2,3)
b = x
print(b is x) #true  is表示两个操作数是否指向同一个东西,即是否是同一个对象
x += (100,)   #等价于x=x+(100,)新建了一个元组
print(x)      #(1,2,3,100)
print(b)      #(1,2,3)

1.3.4 元组比大小


两个元组比大小,就是逐个元素比大小,直到分出胜负
如果有两个对应元素不可比大小,则出runtime error


1.3.5 元组实例


已知2012年1月25日是星期三,编写一个程序,输入用“年 月 日”表示的一个2012年1月25日之后的日期,输出该日期是星期几(星期日输出0)

思路:2012年1月22日是星期天。算出给定日期是从该天起过了x天,然后输出x%7

monthDays = [-1,31,28,31,30,31,30,31,31,30,31,30,31]
days = 0  #从2012/01/22开始过了多少天
lst = input().split()
year,month,date = int(lst[0]), int(lst[1]), int(lst[2])
for y in range(2012, year):  #先累加过掉的整年的天数
	if y%4 ==0 and y%100!=0 or y%400 == 0:  #闰年
		days += 366
	else:
		days += 365
if year%4 == 0 and year%100!=0 or year%100 == 0:
	monthDays[2] = 29
for i in range(1,month):  #再累加year那年过掉的正月的天数
	days += monthDays[i]
days += date  #累加year年month那月的天数
days -= 22  #2012年1月22日是星期天,扣掉2012年的前22天
print(days%7)  #星期天算一周的第0天

2. 列表


2.1 列表的增删和修改


empty=[]  #[]表示空表
list1=['abc', 'Huawei', 1997, 23]
list1[1]=100
print(list1) #>>['abc', 100, 1997, 23]
del list1[2] #删除元素
print(list1) #>>['abc', 100, 23]
list1 += [100,110]  #在list1原地添加
list1.append(200)  #添加元素200

2.2 列表相加


列表相加可以得到新的列表


2.2.1 列表和+=


对于列表来说,a+=b和a=a+b不同

b=a=[1,2]
a+=[3]     #b和a指向相同地方,在a末尾添加元素,b也受影响
print(a,b) #>>[1,2,3] [1,2,3]
a=a+[4,5]  #对a重新赋值,不会影响到b
print(a)   #>>[1,2,3,4,5]
print(b)   #>>[1,2,3]

2.2.2 列表的乘法


TBD.


2.2.3 列表相关函数


  • append(x) 添加元素x到尾部
  • extend(x) 添加列表x中的元素到尾部
  • insert(i, x) 将元素x插入到下标i处
  • remove(x) 删除元素x
  • reverse() 颠倒整个列表
  • index(x) 查找元素x,找到则返回第一次出现的下标,找不到则引发异常

2.2.4 列表映射


TBD.


2.2.5 列表的拷贝


a=[1,2,3,4]
b=a[:]

2.2.6 列表的深拷贝


a=[1,[2]]
b=a[:]
b.append(4)
print(b) #>>[1,[2],4]
a[1].append(3)
print(a) #>>[1,[2,3]]
print(b) #>>[1,[2,3],4]
import copy
a=[1,[2]]
b=copy.deepcopy(a)
b.append(4)
print(b) #>>[1,[2],4]
a[1].append(3)
print(a) #>>[1,[2,3]]
print(b) #>>[1,[2],4]

2.2.7 元组、列表和字符串互转


print(list("hello"))            #>>['h', 'e', 'l', 'l', 'o']
print("".join(['a','44','c']))  #>>a44c
print(tuple("hello"))           #>>('h', 'c', '1', '1', 'o')
print("".join(('a','44','c')))  #>>a44c

2.2.8 二维列表


错误

a=[0,0,0]
b=[a]*3  #b有三个元素,都是指针,都和a指向同一地方

正确

matrix = [[1,2,3], [4,5,6], [7,8,9]]

matrix = [[0 for i in range(3)] for i in range(3)]

生成一个3行4列的矩阵,所有元素都是0

lst=[]
for i in range(3):
	lst.append([0]*4)
lst[0][0]=lst[2][3]=100
for i in range(3):
	for j in range(4):
		print(lst[i][j],end=" ")
	print("")

扩展:
定义二维元组

matrix=((1,2,3), (4,5,6), (7,8,9))

matrix = tuple(tuple(0 for i in range(3)) for i in range(3))

3. 参考资料

【1】慕课网,北京理工大学,嵩天教授,《Python语言程序设计》声明:笔记中截图、部分代码来自该课程课件,非博主原创
【2】Python123:在线编程网站
【3】菜鸟教程
【4】慕课网,北大,郭玮老师,《实用Python程序设计》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值