数据类型
数据类型-字符串
- 列举 Python 中的基本数据类型?
答: Python3 中有六个标准的数据类型:字符串(String)、数字(Digit)、列表(List)、元组(Tuple)、集合(Sets)、字典(Dictionary)。
- 如何区别可变数据类型和不可变数据类型
答: 从对象内存地址方向来说
可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)
不可变数据类型:内存改变,值也跟着改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。
- 将"hello world"转换为首字母大写"Hello World"
答: 这个得看清题目是要求两个单词首字母都要大写,如果只是第一个单词首字母大小的话,只使用 capitalize 即可,但是这里是两个单词,所以用下面的方法。
arr
=
"hello world"
.
split
(
" "
)
new_str
=
f
"{arr[0].capitalize()} {arr[1].capitalize()}"
print
(
new_str
)
后来评论中有朋友提到了下面的方法,这里感谢这位朋友提醒。方案如下
"hello world".title()
非常简单一句话搞定。
- 如何检测字符串中只含有数字?
答:可以通过 isdigit 方法,例子如下
s1
=
"12223"
.
isdigit
(
)
print
(
s1
)
s2
=
"12223a"
.
isdigit
(
)
print
(
s2
)
#结果如下:
#True
#False
- 将字符串"ilovechina"进行反转
答:
s1
=
"ilovechina"
[
::
-
1
]
print
(
s1
)
- Python 中的字符串格式化方式你知道哪些?
答:%s,format,fstring(Python3.6 开始才支持,现在推荐的写法)
- 有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。
答:因为题目要是写一个函数所以我们不能直接使用 strip,不过我们可以把它封装到函数啊
def
strip_function
(
s1
)
:
return
s1
.
strip
(
)
s1
=
" adabdw "
print
(
strip_function
(
s1
)
)
- 获取字符串”123456“最后的两个字符。
答:切片使用的考察,最后两个即开始索引是 -2,代码如下
a
=
"123456"
print
(
a
[
-
2
::
]
)
- 一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
答:
a
=
"S"
.
encode
(
"gbk"
)
.
decode
(
"utf-8"
,
'ignore'
)
print
(
a
)
- (1)s=“info:xiaoZhang 33 shandong”,用正则切分字符串输出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]。(2)a = "你好 中国 ",去除多余空格只留一个空格。
答:
(1)我们需要根据冒号或者空格切分
import
re
s
=
"info:xiaoZhang 33 shandong"
res
=
re
.
split
(
r
":| "
,
s
)
print
(
res
)
(2)
s
=
"你好 中国 "
print
(
" "
.
join
(
s
.
split
(
)
)
)
- (1) 怎样将字符串转换为小写。 (2) 单引号、双引号、三引号的区别?
答: (1) 使用字符串的 lower() 方法。
(2)单独使用单引号和双引号没什么区别,但是如果引号里面还需要使用引号的时候,就需要这两个配合使用了,然后说三引号,同样的三引号也分为三单引号和三双引号,两个都可以声名长的字符串时候使用,如果使用 docstring 就需要使用三双引号。
数据类型 - 列表
- 已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。
答:
list(set(AList))
- 如何实现 “1,2,3” 变成 [“1”,“2”,“3”]
答:
s = "1,2,3"
print(s.split(","))
- 给定两个 list,A 和 B,找出相同元素和不同元素
答:
A、B 中相同元素:print(set(A)&set(B))
A、B 中不同元素:print(set(A)^set(B))
- [[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]
答:
l = [[1,2],[3,4],[5,6]]
x=[j for i in l for j in i]
print(x)
- 合并列表 [1,5,7,9] 和 [2,2,6,8]
答:使用 extend 和 + 都可以。
a = [1,5,7,9]
b = [2,2,6,8]
a.extend(b)
print(a)
- 如何打乱一个列表的元素?
答:
import random
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)
数据类型 - 字典
- 字典操作中 del 和 pop 有什么区别
答:del 可以根据索引(元素所在位置)来删除的,没有返回值。 pop 可以根据索引弹出一个值,然后可以接收它的返回值。
- 按照字典的内的年龄排序
d1 = [
{‘name’:‘alice’, ‘age’:38},
{‘name’:‘bob’, ‘age’:18},
{‘name’:‘Carl’, ‘age’:28},
]
答:
d1 = [
{'name': 'alice', 'age': 38},
{'name': 'bob', 'age': 18},
{'name': 'Carl', 'age': 28},
]
print(sorted(d1, key=lambda x:x["age"]))
- 请合并下面两个字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}
答: 合并字典方法很多,可以使用 a.update(b) 或者下面字典解包的方式
a = {"A":1,"B":2}
b = {"C":3,"D":4}
print({**a,**b})
- 如何使用生成式的方式生成一个字典,写一段功能代码。
答:
#需求 3: 把字典的 key 和 value 值调换;
d = {'a':'1', 'b':'2'}
print({v:k for k,v in d.items()})
- 如何把元组 (“a”,“b”) 和元组 (1,2),变为字典 {“a”:1,“b”:2}
答 zip 的使用,但是最后记得把 zip 对象再转换为字典。
a = ("a", "b")
b = (1, 2)
print(dict(zip(a, b)))
数据类型 - 综合
-
下列字典对象键类型不正确的是?
A:{1:0,2:0,3:0}
B:{“a”:0, “b”:0, “c”:0}
C: {(1,2):0, (2,3):0}
D: {[1,2]:0, [2,3]:0}
答:D 因为只有可 hash 的对象才能做字典的键,列表是可变类型不是可 hash 对象,所以不能用列表做为字典的键。
- 如何交换字典 {“A”:1,“B”:2}的键和值
答:
s = {"A":1,"B":2}
#方法一:
dict_new = {value:key for key,value in s.items()}
#方法二:
new_s= dict(zip(s.values(),s.keys()))
- Python 里面如何实现 tuple 和 list 的转换?
答: Python 中的类型转换,一般通过类型强转即可完成 tuple 转 list 是 list() 方法 list 转 tuple 使用 tuple() 方法
- 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
答: 这个题目考察了 Python 标准库的 itertools 模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用 islice 方法来实现切片的功能。例子如下
from itertools import islice
gen = iter(range(10)) #iter()函数用来生成迭代器
#第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引
for i in islice(gen,0,4):
print(i)
- 请将 [i for i in range(3)] 改成生成器
答:通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能即,
(i for i in range(3))
- a=“hello” 和 b=“你好” 编码成 bytes 类型
答: 这个题目一共三种方式,第一种是在字符串的前面加一个 b,第二种可以使用 bytes 方法,第三种使用字符串 encode 方法。具体代码如下,abc 代表三种情况
a = b"hello"
b = bytes("你好", "utf-8")
c = "你好".encode("utf-8")
print(a, b, c)
-
下面的代码输出结果是什么?
a = (1,2,3,[4,5,6,7],8)
a[2] = 2
答: 我们知道元组里的元素是不能改变的所以这个题目的答案是出现异常。
-
下面的代码输出的结果是什么?
a = (1,2,3,[4,5,6,7],8)
a[3][0] = 2
答:前面我说了元组的里元素是不能改变的,这句话严格来说是不准确的,如果元组里面元素本身就是可变类型,比如列表,那么在操作这个元素里的对象时,其内存地址也是不变的。a[3] 对应的元素是列表,然后对列表第一个元素赋值,所以最后的结果是: (1,2,3,[2,5,6,7],8)