同上一篇,依旧是上周末做的练习题笔记。
笔记代码直接从jupyter notebook笔记本中导出的,因为此,所以有些代码中,输出语句中没有print。
参考时,请注意咯!
1 列出python中可变数据类型和不可变数据类型,并简述原理
答:Python中可变数据类型有:列表、字典、集合;不可变数据类型有:数值型、字符创、元祖
【了解】
不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。
可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。
总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变
2 用lambda函数实现两个数相乘
# 用lambda函数实现两个数相乘
c = lambda a , b : a * b
c(3,2)
运行结果: 6
3 字典根据键从小到大排序dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
# 字典根据键从小到大排序dict
from collections import OrderedDict
dict = {"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
OrderedDict(sorted(dict.items(),key= lambda x:x[0]) )
运行结果:
OrderedDict([('age', 18),
('city', '深圳'),
('name', 'zs'),
('tel', '1362626627')])
4 利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
# 利用collections库中的Counter方法统计字符创中每个单词出现的次数
from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
Counter(a.split(';'))
这道题目,我看到网上有其他做法,将各个字母出现的次数计算了出来。但我理解,这里是计算“单词”出现的次数,不是单独的字母,所以用split函数提前做了处理。
运行结果:
Counter({'kjalfj': 1,
'ldsjafl': 1,
'hdsllfdhg': 1,
'lahfbl': 1,
'hl': 1,
'ahlf': 1,
'h': 1})
5 字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"
#用正则过滤字符串中英文和数字
import re
a = "not 404 found 张三 99 深圳"
b = a.split(" ")
res = re.findall('\d+|[a-zA-Z]+',a)
for i in res:
if i in b:
b.remove(i)
new_str = " ".join(b)
print(new_str)
运行结果:张三 深圳
6 filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(filter(lambda x: x%2 !=0,a))
运行结果:
[1, 3, 5, 7, 9]
7 列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x for x in a if x%2 ==1]
print(b)
运行结果:
[1, 3, 5, 7, 9]
8 写代码,有如下变量,请按照要求实现每个功能 name = " aleX "
a.移除name变量对应的值两边的空格,并输入移除有的内容
# a.移除name变量对应的值两边的空格,并输入移除有的内容
name = " aleX "
print(name.strip())
运行结果:
aleX
b.判断name变量对应的值是否以 "al"开头,并输出结果
# b.判断name变量对应的值是否以 "al"开头,并输出结果
name = " aleX "
print(name.startswith("al"))
运行结果:
False
c.判断name变量对应的值是否以 "X"结尾,并输出结果
# c.判断name变量对应的值是否以 "X"结尾,并输出结果
name = " aleX "
print(name.endswith("X"))
运行结果:
False
d.将name变量对应的值中的 " l" 替换为 " p",并输出结果
# d.将name变量对应的值中的 " l" 替换为 " p",并输出结果
name = " aleX "
print(name.replace("l","p"))
运行结果:
apeX
【补充下replace函数语法:】 Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
str.replace(old, new[, max]) old -- 将被替换的子字符串。 new -- 新字符串,用于替换old子字符串。 max -- 可选字符串, 替换不超过 max 次
e.将name变量对应的值根据 " l" 分割,并输出结果。
# e.将name变量对应的值根据 " l" 分割,并输出结果。
name = " aleX "
print(name.split("l"))
运行结果:
[' a', 'eX ']
f. 请问,上一题 分割之后得到值是什么类型?
# f.请问,上一题 分割之后得到值是什么类型?
# name变量经过分割后,得到列表List。
print(type(name.split("l")))
#list内部值为字符串
print(type(name.split("l")[0]))
运行结果:
g.将name变量对应的值变大写,并输出结果
# g.将name变量对应的值变大写,并输出结果
print(name.upper())
运行结果:
ALEX
h.将name变量对应的值变小写,并输出结果
# h.将name变量对应的值变小写,并输出结果
print(name.lower())
运行结果:
alex
i.请输出name变量对应的值的第2个字符?
# i.请输出name变量对应的值的第2个字符?
name = " aleX "
print(name[1:2])
运行结果:
a
j.请输出name变量对应的值的前3个字符?
# j.请输出name变量对应的值的前3个字符?
name = " aleX "
print(name[:3])
运行结果: al
k.请输出name变量对应的值的后2个字符?
# k.请输出name变量对应的值的后2个字符?
name = " aleX "
print(name[-2:])
运行结果:
X
l.请输出name变量对应的值中 "e" 所在索引位置?
# l.请输出name变量对应的值中 "e" 所在索引位置?
name = " aleX "
print(name.find('e'))
运行结果:3
查找字符串中的索引位置,我们可以使用find()方法或者index()方法。 这两个方法都可以检测字符串中是否包含子字符串,并且可以指定检索的开始和结束的索引范围。 但是要注意的是,如果要查找的子字符串不在原字符串中,find()函数返回-1;但index()函数会报错“ValueError: substring not found”。 基于此,推荐使用find()函数。
# 使用enumerate函数
name = " aleX "
for k,v in enumerate(name):
if v == "e":
print("e的索引是: " +str(k))
e的索引是: 3