Python基础学习(3)

it2024-07-19  39

文章目录

一、元组习题提点个人觉得该注意的点 二、字符串习题个人小提示吧 三、字典习题tips 四、最后


一、元组

习题

1、元组概念

写出下面代码的执行结果和最终结果的类型。分析为什么会出现这样的结果。

答: 执行结果:

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

最终结果的类型:

print(a, type(a)) # (1, 2, 1, 2) <class 'tuple'> 元组 print(b, type(b)) # (1, 1) <class 'tuple'> 元组 print(c, type(c)) # 2 <class 'int'> 整型

分析: 第一个(1, 2)为一个元组,元组*为重复操作符,即重复两次元组得到(1, 2, 1, 2)。

第二个括号内只有一个元素,但里面有逗号则为元组,与第一个一样为重复两次元组得到(1, 1)。

第三个虽然有括号,但是括号被视为运算符,则(1)不为元组,变量×2得2。


2、拆包过程是什么? a, b = 1, 2

上述过程属于拆包吗? 可迭代对象拆包时,怎么赋值给占位符?

答: (1)拆包过程就是将元组中的多个元素拆分到多个变量当中。

(2)个人认为属于拆包过程,等号右边为一个元组,等号左边为两个变量,得到的结果为 a = 1 , b = 2。

(3)例:

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

贴上另一位代码狗(同学)对这道题的见解:


提点个人觉得该注意的点

一、元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),那么我们可以直接更改其元素,注意这跟赋值其元素不同。 例如:

t1 = (1, 2, 3, [4, 5, 6]) print(t1) # (1, 2, 3, [4, 5, 6]) t1[3][0] = 9 #对元组中的列表内的值进行了修改 print(t1) # (1, 2, 3, [9, 5, 6])

二、当要增加或删除元组中的一个元素时,不能直接删除或者增加,需要你成为一位手巧的手术医生,用切片将元组切开,再用+将你所要加入的元素加进去。

例:

week = ('Monday', 'Tuesday', 'Thursday', 'Friday') week = week[:2] + ('Wednesday',) + week[2:] print(week) # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')

三、创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。 例:

t2 = 1, 10.31, 'python' print(t2, type(t2)) # (1, 10.31, 'python') <class 'tuple'> #元组也可以不用括号括起来就能创建 x = (1,) #也可以x = 1, print(type(x)) # <class 'tuple'>

注意不要被骗了窝!!!


二、字符串

习题

1、字符串函数回顾

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

答:使用replace(old, new [, max])函数。例: str5 = ' I Love LsgoGroup ' print(str5.strip().replace('I', 'We')) # We Love LsgoGroup

(2)怎么把字符串按照空格进行拆分?

答:split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表。例: str5 = ' I Love LsgoGroup ' print(str5.strip().split()) # ['I', 'Love', 'LsgoGroup'] print(str5.strip().split('o')) # ['I L', 've Lsg', 'Gr', 'up']

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

答:lstrip([chars]) 截掉字符串左边的空格或指定字符。rstrip([chars]) 删除字符串末尾的空格或指定字符。strip([chars]) 在字符串上执行lstrip()和rstrip()。例: str5 = ' I Love LsgoGroup ' print(str5.lstrip()) # 'I Love LsgoGroup ' print(str5.lstrip().strip('I')) # ' Love LsgoGroup ' print(str5.rstrip()) # ' I Love LsgoGroup' print(str5.strip()) # 'I Love LsgoGroup'

若需要去除字符串中间的空格,则先将字符串用split()分开,再通过for函数合并。

str = 'I love python' str1 = '' str.split() # ['I', 'love', 'python'] for i in str.split(): str1 += i print(str1) # Ilovepython

2、实现isdigit函数 题目要求 实现函数isdigit, 判断字符串里是否只包含数字0~9 答:

def isdigit(string): return str = string.isnumeric() print(isdigit('123456789')) # True print(isdigit('asdfas32d4f')) # False

3、leetcode 5题 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例:

输入: “babad” 输出: “bab”

输入: “cbbd” 输出: “bb”

答:

# your code here class Solution: def longestPalindrome(self, s): k = '' #创建一个空字符串用于存放回文子串 for index,char in enumerate(s): #得出字符串对应字符的索引值 j = s.rfind(char) #从字符串右边开始寻找同样字符串的索引值 while 1: if j == index: #判断从右边找到的字符索引值是否等于当前字符的索引值 break else: a = s[index:j+1] #将这段子串存在a中 d = s[0:j] c = s[index:j+1] b = c[::-1] #将子串翻转 if a == b: #是回文子串则输出给k if len(k) < len(a): k = s[index:j+1] break else: j = d.rfind(char) #不是则继续向左寻找相同字符索引 return k sin = 'asdd12dfg' u = Solution().longestPalindrome(sin) print(u)

个人小提示吧

一、

strip([chars]) 在字符串上执行lstrip()和rstrip()。这个函数并不能删除字符串内所有的空格,只能删除字符最外边的空格哦。

二、 好像没了。


三、字典

习题

1、字典基本操作

字典内容如下:

dic = { 'python': 95, 'java': 99, 'c': 100 }

用程序解答下面的题目

字典的长度是多少 print(len(dic)) # 3 请修改’java’ 这个key对应的value值为98 dic['java'] = 98 # {'python': 95, 'java': 98, 'c': 100} 删除 c 这个key del dic['c'] # {'python': 95, 'java': 98} 增加一个key-value对,key值为 php, value是90 dic['php'] = 90 # {'python': 95, 'java': 98, 'php': 90} 获取所有的key值,存储在列表里 lst = list(dic.keys()) # ['python', 'java', 'php'] 获取所有的value值,存储在列表里 lst1 = list(dic.values()) # [95, 98, 90] 判断 javascript 是否在字典中 'javascript' in dic # False 获得字典里所有value 的和 sum = sum(lst1) # 283 获取字典里最大的value max = max(lst1) # 98 获取字典里最小的value min = min(lst1) # 90 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中 dic1 = {'php':97} dic.update(dic1) # {'python': 95, 'java': 98, '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): for keys, values in data.items(): if keys == 'python': # 用三个if 对症下药 for k, v in values .items(): values[k] = int(v) # int强行转化为整型 if keys == 'c++': i = 0 for v in values: values[i] = int(v) i += 1 if keys == 'java': for k, v in values[0].items(): # values[0] 是一个元组 (values[0])[k] = int(v) # (values[0])[k] 代表元组的键k data1 = { 'python': {'上学期': '90', '下学期': '95'}, 'c++': ['95', '96', '97'], 'java': [{'月考': '90', '期中考试': '94', '期末考试': '98'}] } transfer_score(data1) print(data1) ''' { 'python': {'上学期': 90, '下学期': 95}, 'c++': [95, 96, 97], 'java': [{'月考': 90, '期中考试': 94, '期末考试': 98}] } '''

tips

一、 dict.keys()返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。

dic = {'Name': 'lsgogroup', 'Age': 7} print(dic.keys()) # dict_keys(['Name', 'Age']) lst = list(dic.keys()) # 转换为列表 print(lst) # ['Name', 'Age']

dict.values()返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。

dic = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'} print(dic.values()) # dict_values(['female', 7, 'Zara']) print(list(dic.values())) # [7, 'female', 'Zara']

dict.items()以列表返回可遍历的 (键, 值) 元组数组。

dic = {'Name': 'Lsgogroup', 'Age': 7} print(dic.items()) # dict_items([('Name', 'Lsgogroup'), ('Age', 7)])

dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值。 这是得到字典中的一个值哦。

二、 直接赋值和 copy 的区别

dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]} # 引用对象 dic2 = dic1 # 浅拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用 dic3 = dic1.copy() print(id(dic1)) # 148635574728 print(id(dic2)) # 148635574728 id地址没有改变,标签指向 print(id(dic3)) # 148635574344 id地址改变了,为浅复制 # 修改 data 数据 dic1['user'] = 'root' # 更改元组中的值 dic1['num'].remove(1) # 输出结果 print(dic1) # {'user': 'root', 'num': [2, 3]} print(dic2) # {'user': 'root', 'num': [2, 3]} 跟着dic1一起改变了 print(dic3) # {'user': 'lsgogroup', 'num': [2, 3]} 对值赋值没有改变,但是进行函数后'num'中的1被移除了。

四、最后

我尽力了,若解释得不够准确,可以跑到这看更加详细的解释: https://blog.csdn.net/weixin_51503843/article/details/109168952 里面有许多其他知识点的小提示。 我要继续想我的字典代码了。 来不及解释了。

最新回复(0)