同上一篇,依旧是上周末做的练习题笔记。

笔记代码直接从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