一、元组
习题
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
里面有许多其他知识点的小提示。
我要继续想我的字典代码了。
来不及解释了。