一、元组
1.部分习题与解答
1-1 元组概念
写出下面代码的执行结果和最终结果的类型。
(1, 2)*2
(1, )*2
(1)*2
解:
(1, 2) 显然是一个元组类型,而乘号 * 在元组中是复制拼接,所以输出一个为(1, 2, 1, 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 拆包过程是什么?
下述过程属于拆包吗?
可迭代对象拆包时,怎么赋值给占位符?
a, b = 1, 2
解:
①玩过穿越火线的都知道,拆包长按E键就可以了,但在这里,python的元组拆包可不是这样。
元组拆包,是一个赋值表达式,效果是,将=(赋值操作符)右边的元组的元素拆开,赋值给=左边的多个变量。我们可以将这一操作理解为平行赋值。也就是说拆包会把一个可迭代对象中的元素一并赋值到对应变量中去。
例子:
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python
②不属于,这是赋值表达式
③拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。使用占位符* _
去忽略不需要关注的元素,相当于一个占位符,抵消掉了我们不需要关注的元素。
例子:
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c) # 1 2 5
print(rest) # [3, 4] rest接收可多余的元素
二、字符串
简单几点
1.若想避开转义字符,输出一些特定的符号,一个简单粗暴的方法是:原始字符串只需要在字符串前边加一个英文字母 r 即可。
例子:
print(r'C:\Program Files\Intel\Wifi\Help\n\t\r')
# C:\Program Files\Intel\Wifi\Help\n\t\r
2.python支持多重句点法,执行的顺序依次从做左到右。
例子:
先调用strip()
将字符串首尾的空格删去,得到的新的字符串(没显示出来),然后在对新的字符串调用lstrip('I')
将其左侧的'l'
删去得到,再把结果打印出来。
str5 = ' I Love LsgoGroup '
print(str5.strip().lstrip('I')) # ' Love LsgoGroup'
3.format
格式化函数
作用:新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
例子:
str8 = "{0} Love {1}".format('I', 'Lsgogroup') # 位置参数
print(str8) # I Love Lsgogroup
str8 = "{a} Love {b}".format(a='I', b='Lsgogroup') # 关键字参数
print(str8) # I Love Lsgogroup
4.部分习题与解答
4-1 字符串函数回顾
1)怎么批量替换字符串中的元素?
答:replace(old, new [, max])
把 将字符串中的old
替换成new
,如果max
指定,则替换不超过max
次。对次数max进行设置或多次调用replace函数就能实现批量替换元素。
例子:
str = 'I Love python'
print(str.replace('I', 'We')) # We Love python
2)怎么把字符串按照空格进行拆分?
答:使用split(str="", num)
函数,不带参数默认是以空格为分隔符切片字符串,如果num
参数有设置,则仅分隔num
个子字符串,返回切片后的子字符串拼接的列表。
例子:
str = 'I Love python'
print(str.split()) # ['I', 'Love', 'python']
3)怎么去除字符串中的空格?
答:
①若要去除的空格位于字符的首尾端,可使用strip()
函数删除在字符串上首尾端的空格。
例子:
str = ' I Love python '
print(str.strip()) # 'I Love python'
②若想去除字符串中存在的所有空格,可简单粗暴的用拆分与组合形式来搞定,可用split()
函数来实现拆分,for循环实现组合。
例子:
str = ' I Love python '
s = ''
print(str.split()) # ['I', 'Love', 'python']
for str1 in str.split():
s += str1
print(s) # ILovepython
4-2 实现isdigit函数
题目要求
实现函数isdigit, 判断字符串里是否只包含数字0~9
解题方法:isnumeric()
如果字符串中只包含数字字符,则返回 True,否则返回 False。
解题代码:
def isdigit(string):
result = (string.isnumeric()) # 直接调用isnumeric()函数
return result
print(isdigit('15645546')) # True
print(isdigit('fs54s15f')) # False
4-3 最长回文子串
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例:
输入: “babad”
输出: “bab”
输入: “cbbd”
输出: “bb”
解题代码(向左滑动查看更多代码):
def max_palindrome(string):
i, j = 0, 0
for a in range(len(string)-2): # 控制外循环
j += 1
for b in range(j+1): # 控制内循环
s1 = string[i:(len(string)+i-j)] # 对原始字符串切片,并从最大切片开始寻找
s2 = s1[::-1] # 将s1倒序赋予s2
i += 1 # 切片的起始位置往右移动一位
if s1 == s2: # 若两者相等,则表明找到了最大回文串
return s1 # 用return返回s1
i = 0 # 对i置零,保证下次的切片仍然是从第一个元素开始
s1 = 'babad'
s2 = 'cbbd'
s3 = '123656hjk8998k'
print(max_palindrome(s1)) # bab
print(max_palindrome(s2)) # bb
print(max_palindrome(s3)) # k8998k
三、字典
1.仅一点:关于字典的复制
① dict.copy()
返回一个字典的浅复制
② deepcopy(dict)
返回返回一个字典的深复制
③ =
(等号) 赋值语句仅是标签指向
例子:
dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]}
dic2 = dic1 # 标签指向
dic3 = dic1.copy() # 浅复制
dic4 = deepcopy(dic1) # 深复制
print(id(dic1)) # 31204480
print(id(dic2)) # 31138944 地址未变
print(id(dic3)) # 31139008 新的相邻地址
print(id(dic3)) # 31694912 真正的一个新地址
# 下面我们对dic1进行一些操作
dic1['user'] = 'root'
dic1['num'].remove(1)
print(dic1) # {'user': 'root', 'num': [2, 3]}
print(dic2) # {'user': 'root', 'num': [2, 3]}
print(dic3) # {'user': 'lsgogroup', 'num': [2, 3]}
print(dic4) # {'user': 'lsgogroup', 'num': [1, 2, 3]}
# dic3 仍然受到了影响,只有 dic4 才纹丝不动
2.部分习题与解答
2-1 字典基本操作
字典内容如下:
dic = {'python': 95, 'java': 99, 'c': 100, }
用程序解答下面的题目
-
字典的长度是多少
-
请修改’java’ 这个key对应的value值为98
-
删除 c 这个key
-
增加一个key-value对,key值为 php, value是90
-
获取所有的key值,存储在列表里
-
获取所有的value值,存储在列表里
-
判断 javascript 是否在字典中
-
获得字典里所有value 的和
-
获取字典里最大的value
-
获取字典里最小的value
-
字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
解:
(没什么难度,但需要点耐心):
dic = {'python': 95, 'java': 99, 'c': 100, }
print(len(dic)) # 3
dic['java'] = 98
print(dic) # {'python': 95, 'java': 98, 'c': 100}
dic.pop('c')
print(dic) # {'python': 95, 'java': 98}
dic['php'] = 90
print(dic) # {'python': 95, 'java': 98, 'php': 90}
keys = list(dic.keys())
print(keys) # ['python', 'java', 'php']
values = list(dic.values())
print(values) # [95, 98, 90]
print('javascript' in dic) # False
sum = 0
for value in dic.values():
sum += value
print(sum) # 283
print(max(values)) # 98
print(min(values)) # 90
dic1 = {'php': 97}
dic.update(dic1)
print(dic) # {'python': 95, 'java': 98, 'php': 97}
2-2 字典中的value
有一个字典,保存的是学生各个编程语言的成绩,内容如下:
data = {
'python': {'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
}
各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(data)
,将分数修改成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}]
}
'''
关机,下班!