DAY3第三次任务

it2024-12-15  12

目录

一.元组

二.字符串

三.字典

四.总结


一.元组

1.1 创建和访问一个元组

Python 的元组与列表类似,不同之处在于tuple被创建后就不能对其进行修改,类似字符串。元组使用小括号,列表使用方括号。元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)。 x = [1,2] print(type(x)) # <class 'list'> x = (1,2) print(type(x)) # <class 'tuple'> 创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。 x = (1) print(type(x)) # <class 'int'> x = 2, 3, 4, 5 print(type(x)) # <class 'tuple'> x = (1,) print(type(x)) # <class 'tuple'>

【二维元组】

x = (1,3.14, 'hello'), ('data', 666) #这里就没有加外边的小括号 print(x) # ( (1,3.14, 'hello'), ('data', 666)) 但是输出的时候是有括号的

1.2 更改和删除一个元组

元组本身是不可以更改的,但是如果里面有可更改的内容,那么可以对那部分进行更改。 【添加元素】

a=('1','2','3','4') a=a[:2]+('hello',)+a[2:] print(a) #注意hello后面有个逗号 ------------------------------- ('1', '2', 'hello', '3', '4')

【部分更改】

a=('1','2',[1,2,3]) a[2][0]=666 #更改[1,2,3]的第一个元素 print(a) del(a[2][0])#删除[666,2,3]的第一个元素 print(a) ------------------------------ ('1', '2', [666, 2, 3]) ('1', '2', [2, 3])

1.3 元组相关的操作符

(1)等号操作符:== 只有成员位置都相同时才返回True。

(2)连接操作符 + 把两个元组拼接起来。

(3) 重复操作符 * 复制一个元组几份。

(4)成员关系操作符 in、not in 判断元组中是否含有某个元素。

t1 = (123, 456) t2 = (456, 123) t3 = (123, 456) print(t1 == t2) # False print(t1 == t3) # True t4 = t1 + t2 #两个元组拼接 print(t4) # (123, 456, 456, 123) t5 = t3 * 3 #复制了3份 print(t5) # (123, 456, 123, 456, 123, 456) t3 *= 3 #自己复制自己 print(t3) # (123, 456, 123, 456, 123, 456) print(123 in t3) # True print(456 not in t3) # False

1.4 内置方法

元组大小和内容都不可更改,因此只有 count 和 index 两种方法。

t = (1, 10.31, 'python') print(t.count('python')) # 1 print(t.index(10.31)) # 1 count('python') 是记录在元组 t 中该元素出现几次,显然是 1 次index(10.31) 是找到该元素在元组 t 的索引,显然是 1

1.5 解压元组

解压(unpack)一维元组(有几个元素左边括号定义几个变量),二维元组同理。

t = (1, 10.31, 'python') (a, b, c) = t print(a, b, c) # 1 10.31 python

如果你只想要元组其中几个元素,用通配符「*」把多个元素丢给 rest 变量。

t = 1, 2, 3, 4, 5 a, b, *rest, c = t print(a, b, c) # 1 2 5 print(rest) # [3, 4]

如果不需要rest变量,就用通配符「*」加上下划线「_」。

t = 1, 2, 3, 4, 5 a, b, *_ = t print(a, b) # 1 2

1.6 习题

(1)元组概念 写出下面代码的执行结果和最终结果的类型,并分析为什么会出现这样的结果。

(1, 2)*2 (1, )*2 (1)*2

回答:

a=(1,2)*2 b=(1,)*2 c=(1)*2 print(a) #(1, 2, 1, 2) print(b) #(1, 1) print(c) #2 print(type(a)) #<class 'tuple'> print(type(b)) #<class 'tuple'> print(type(c)) #<class 'int'>

元组c中只有一个元素,后面没有添加逗号,括号被当成运算符使用了。 (2)拆包过程是什么? 答:拆包的过程是把元组里的元素取出来,并在元组的外部创建它,这样能够方便地提供给元组外使用。

a, b = 1, 2

上述过程属于拆包吗? 答:我认为不属于,因为1,2需要赋值给某一个变量才是一个元组。

二.字符串

1.1 字符串的含义

Python 中字符串被定义为引号之间的字符集合。Python 支持使用成对的 单引号 或 双引号。 t1 = 'i love Python!' print(t1, type(t1)) # i love Python! <class 'str'> t2 = "I love Python!" print(t2, type(t2)) # I love Python! <class 'str'> print(5 + 8) # 13 print('5' + '8') # 58 两个字符串拼接

Python 的常用转义字符

转义字符描述\\反斜杠符号\'单引号\"双引号\n换行\t横向制表符(TAB)

转义字符可以让字符串更加丰富它的内容。 (1)如果字符串中需要出现单引号或双引号,可以使用转义符号\对字符串中的符号进行转义。

print('let\'s go') # let's go print("let's go") # let's go print('C:\\now') # C:\now print("C:\\Program Files\\Intel\\Wifi\\Help") # C:\Program Files\Intel\Wifi\Help

(2)原始字符串只需要在字符串前边加一个英文字母 r 即可。

print(r'C:\Program Files\Intel\Wifi\Help') # C:\Program Files\Intel\Wifi\Help

(3)三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

para_str = """这是一个多行字符串的实例 多行字符串可以使用制表符 TAB ( \t )。 也可以使用换行符 [ \n ]。 """ print(para_str) # 这是一个多行字符串的实例 # 多行字符串可以使用制表符 # TAB ( )。 # 也可以使用换行符 [ # ]。 para_str = '''这是一个多行字符串的实例 多行字符串可以使用制表符 TAB ( \t )。 也可以使用换行符 [ \n ]。 ''' print(para_str) # 这是一个多行字符串的实例 # 多行字符串可以使用制表符 # TAB ( )。 # 也可以使用换行符 [ # ]。

1.2 字符串的切片与拼接

类似于元组具有不可修改性从 0 开始 (和 Java 一样)切片通常写成 start:end 这种形式,包括「start 索引」对应的元素,不包括「end索引」对应的元素。索引值可正可负,正索引从 0 开始,从左往右;负索引从 -1 开始,从右往左。使用负数索引时,会从最后一个元素开始计数。最后一个元素的位置编号是 -1。 str1 = 'I Love LsgoGroup' print(str1[:6]) # I Love print(str1[5]) # e print(str1[:6] + " 插入的字符串 " + str1[6:]) # I Love 插入的字符串 LsgoGroup s = 'Python' print(s) # Python print(s[2:4]) # th print(s[-5:-2]) # yth print(s[2]) # t print(s[-1]) # n

1.3 字符串的常用内置方法

capitalize() 将字符串的第一个字符转换为大写。 lower() 转换字符串中所有大写字符为小写。 upper() 转换字符串中的小写字母为大写。 swapcase() 将字符串中大写转换为小写,小写转换为大写。 count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。 count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。

str2 = "DAXIExiaoxie" print(str2.count('xi')) # 2 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。 str2 = "DAXIExiaoxie" print(str2.endswith('ie')) # True print(str2.endswith('xi')) # False print(str2.startswith('Da')) # False print(str2.startswith('DA')) # True find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回 -1。rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。 str2 = "DAXIExiaoxie" print(str2.find('xi')) # 5 print(str2.find('ix')) # -1 print(str2.rfind('xi')) # 9

Tips:不管是find还是rfind,索引都是从左开始查的。

isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。 str3 = '12345' print(str3.isnumeric()) # True str3 += 'a' print(str3.isnumeric()) # False ljust(width[, fillchar])返回一个原字符串左对齐,并使用fillchar(默认空格)填充至长度width的新字符串。rjust(width[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串。

更多内容请见:https://www.runoob.com/python/python-strings.html

1.4 习题

1、字符串函数回顾

(1)怎么批量替换字符串中的元素?

str="abcdefg" str=str.replace('abc','123') print(str) #123defg

这样有个缺点就是只能替换连续的字符

(2) 怎么把字符串按照空格进⾏拆分? split(str="", num) 不带参数就是默认以空格为分隔符切片字符串。

(3)怎么去除字符串⾸位的空格?

lstrip([chars]) 截掉字符串左边的空格或指定字符。

2、实现isdigit函数

题目要求

实现函数isdigit, 判断字符串里是否只包含数字0~9

def isdigit(string): """ 判断字符串只包含数字 :param string: :return: """ # your code here pass

我的答案:

i=0 s='123a456' for x in s: #遍历整个字符串 obj='0123456789' #建立一个0-9的字符串 if obj.find(x)==-1: #分别判断x是否在obj中,也就是是否在0-9中 i=1 print('字符串包含其他元素') break if i ==0: print('字符串只包含数字')

3、leetcode 5题 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

输入: “babad”

输出: “bab”

输入: “cbbd”

输出: “bb”

暂时没想出来,等写出来再更新

三.字典

3.1 可变类型与不可变类型

序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。

那么如何快速判断一个数据类型 X 是不是可变类型的呢?两种方法:

麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。数值、字符和元组 都能被哈希,因此它们是不可变类型;列表、集合、字典不能被哈希,因此它是可变类型。 i = 1 print(id(i)) # 140732167000896 i = i + 2 print(id(i)) # 140732167000960 l = [1, 2] print(id(l)) # 4300825160 l.append('Python') print(id(l)) # 4300825160 整数 i 在加 1 之后的 id 和之前不一样,因此加完之后的这个 i (虽然名字没变),但不是加之前的那个 i 了,因此整数是不可变类型。列表 l 在附加 'Python' 之后的 id 和之前一样,因此列表是可变类型。

3.2 字典的定义

字典 是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。

dict 内部存放的顺序和 key 放入的顺序是没有关系的。dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。

字典 定义语法为 {元素1, 元素2, ..., 元素n}

更多内容请见https://www.runoob.com/python3/python3-dictionary.html

3.3 习题

(1)用程序解答下面的题目:

字典的长度是多少 dic = {'Name': 'Zara', 'Age': 7} print("字典长度 : %d" % len(dic)) # 字典长度 : 2 请修改’java’ 这个key对应的value值为98 dic = {'java': '100'} dic['java']='100' 删除 c 这个key dic = {'c': '100'} del dic['c'] 增加一个key-value对,key值为 php, value是90 dic = {'a': '100'} dic.update({'php':'90'}) print(dic) #{'a': '100', 'php': '90'} 获取所有的key值,存储在列表里 dic = {'a': '1','b': '2','c': '3'} lst=[] for x in dic.keys(): lst.append(x) print(lst) #['a', 'b', 'c'] 获取所有的value值,存储在列表里 dic = {'a': '1','b': '2','c': '3'} lst=[] for x in dic.values(): lst.append(x) print(lst) #['1', '2', '3'] 判断 javascript 是否在字典中 a = {'a':{},'b':{},'javascript':{}} if "javascript" in a.keys(): print("在") else: print('不在') 获得字典里所有value 的和 dic = {'a':1,'b':2,'c':3} num=0 for x in dic.values(): x=int(x) num=num+x print(num) #6 获取字典里最大的value dic = {'a':'1','b':'2','c':'3'} n=max(dic,key=dic.get) print(n) #c 获取字典里最小的value dic = {'a':'1','b':'2','c':'3'} n=min(dic,key=dic.get) print(n) #a 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中 dic = {'a':'1','b':'2','c':'3'} dic1={'php':97} dic.update(dic1) print(dic) #{'a': '1', 'b': '2', 'c': '3', 'php': 97}

2、字典中的value

有一个字典,保存的是学生各个编程语言的成绩,内容如下

data = { 'python': {'上学期': '90', '下学期': '95'}, 'c++': ['95', '96', '97'], 'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}] }

各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型

def transfer_score(data): # your code here

先空着,回头在写。。。

四.总结

这次写的太水了,自我检讨,下次一定要早点准备,不能再这么仓促了o(╥﹏╥)o!内容虽然很水,但是代码都是自己一个字一个字敲出来的,这个不能糊弄。没写完的内容明天接着写。。。

最新回复(0)