Python__数据习题
1. 字典
1.1 现有字典 d={‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按字典中的 value值进行排序?
sorted(d.items(),key = lambda x:x[1])
1.2 说一下字典和 json 的区别?
-
字典是一种数据结构
-
json 是一种数据的表现形式
-
字典的 key 值只要是能 hash 的就行
-
json 的必须是字符串
1.3 什么是可变、不可变类型?
-
可变不可变指的是内存中的值是否可以被改变
-
不可变类型指的是对象所在内存块里面的值不可以改变,有数值、字符串、元组;
-
可变类型则是可以改变,主要有列表、字典。
1.4 存入字典里的数据有没有先后排序?
-
存入的数据不会自动排序,可以使用 sort 函数对字典进行排序。
1.5 字典推导式?
d = {key: value for (key, value) in iterable}
2. 字符串
2.1 如何理解 Python 中字符串中的\字符?
有三种不同的含义:
- 1、转义字符
- 2、路径名中用来连接路径名
- 3、编写太长代码手动软换行。
2.2 请反转字符串“aStr”?
print(‘aStr’[::-1])
2.3 将字符串"k:1|k1:2|k2:3|k3:4",处理成 Python 字典:{k:1, k1:2, ... } # 字典里的 K 作为字符串处理
str1 = "k:1|k1:2|k2:3|k3:4" def str2dict(str1): dict1 = {} for iterms in str1.split('|'): key,value = iterms.split(':') dict1[key] = value return dict1
2.4 请按 alist 中元素的 age 由大到小排序
alist [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}] def sort_by_age(list1): return sorted(alist,key=lambda x:x['age'],reverse=True)
3. 列表
list:是 Python 中使用最频繁的数据类型,在其他语言中通常叫做数组,通过索引进行查找,使用方括号”[]”, 列表是有序的集合。 应用场景:定义列表使用 [ ] 定义,数据之间使用 “,”分割。
列表的索引从 0 开始:索引就是数据在列表中的位置编号,索引又可以被称为下标。
列表的常用操作:
1)增加
列表名.insert(index, 数据):在指定位置插入数据(位置前有空元素会补位)。
# 往列表 name_list 下标为 0 的地方插入数据 name_list.insert(0, "Sasuke") name_list ['Sasuke', 'zhangsan', 'lisi', 'wangwu', 'zhaoliu'] #现有的列表下标是 0-4,如果我们要在下标是 6 的地方插入数据,那个会自动插入到下标为 5 的地方,也就是# 插入到最后 name_list.insert(6, "Tom") name_list ['Sasuke', 'zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'Tom']
列表名.append(数据):在列表的末尾追加数据(最常用的方法)。
name_list.append("Python") name_list ['Sasuke', 'zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'Tom', 'Python']
列表.extend(Iterable):将可迭代对象中的元素追加到列表。
# 有两个列表 a 和 b a.extend(b) 会将 b 中的元素追加到列表 a 中 a = [11, 22, 33] b = [44, 55, 66] a.extend(b) a [11, 22, 33, 44, 55, 66] # 有列表 c 和 字符串 d c.extend(d) 会将字符串 d 中的每个字符拆开作为元素插入到列表c c = ['j', 'a', 'v', 'a'] d = "python" c.extend(d) c ['j', 'a', 'v', 'a', 'p', 'y', 't', 'h', 'o', 'n']
2)取值和修改
取值:列表名[index] :根据下标来取值。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"] name_list[0] -->'zhangsan' name_list[3] -->'zhaoliu'
修改:列表名[index] = 数据:修改指定索引的数据。
name_list[0] = "Sasuke" name_list ['Sasuke', 'lisi', 'wangwu', 'zhaoliu']
3)删除
del 列表名[index]:删除指定索引的数据。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]# 删除索引是 1 的数据 del name_list[1] name_list -->['zhangsan', 'wangwu', 'zhaoliu']
列表名.remove(数据):删除第一个出现的指定数据。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu", "lisi"]# 删除 第一次出现的 lisi 的数据 name_list.remove("lisi") name_list -->['zhangsan', 'wangwu', 'zhaoliu', 'lisi']
列表名.pop():删除末尾的数据,返回值: 返回被删除的元素。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]# 删除最后一个元素 zhaoliu 并将元素 zhaoliu 返回 name_list.pop() -->'zhaoliu' name_list -->['zhangsan', 'lisi', 'wangwu']
列表名.pop(index):删除指定索引的数据,返回被删除的元素。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"]# 删除索引为 1 的数据 lisi name_list.pop(1) -->'lisi' name_list -->['zhangsan', 'wangwu', 'zhaoliu']
列表名.clear():清空整个列表的元素。
name_list = ["zhangsan", "lisi", "wangwu", "zhaoliu"] name_list.clear() name_list -->[]
4)排序
列表名.sort():升序排序 从小到大。
a = [33, 44, 22, 66, 11]
a.sort()
a -->[11, 22, 33, 44, 66]
列表名.sort(reverse=True):降序排序 从大到小。
a = [33, 44, 22, 66, 11] a.sort(reverse=True) a -->[66, 44, 33, 22, 11]
列表名.reverse():列表逆序、反转。
a = [11, 22, 33, 44, 55]
a.reverse()
a -->[55, 44, 33, 22, 11]
5)统计相关
len(列表名):得到列表的长度。
a = [11, 22, 33, 44, 55]
len(a)
a -->5
列表名.count(数据):数据在列表中出现的次数。
a = [11, 22, 11, 33, 11]
a.count(11) -->3
列表名.index(数据):数据在列表中首次出现时的索引,没有查到会报错。
a = [11, 22, 33, 44, 22]
a.index(22) -->1
if 数据 in 列表: 判断列表中是否包含某元素。
a = [11, 22, 33, 44 ,55] if 33 in a: print("找到了....")
6)循环遍历
使用 while 循环:
a = [11, 22, 33, 44, 55] i = 0 while i < len(a): print(a[i]) i+ = 1
使用 for 循环:
a = [11, 22, 33, 44, 55] for i in a: print(i)
3.1 下面代码的输出结果将是什么?
list = ['a', 'b', 'c', 'd', 'e'] print list[10:
3.2 写一个列表生成式,产生一个公差为 11 的等差数列
print([x*11 for x in range(10)])
3.3 给定两个列表,怎么找出他们相同的元素和不同的元素?
list1 = [1,2,3] list2 = [3,4,5] set1 = set(list1) set2 = set(list2) print(set1&set2) print(set1^set2)
3.4 请写出一段 Python 代码实现删除一个 list 里面的重复元素?
l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2
用 list 类的 sort 方法:
l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) l2.sort(key=l1.index) print l2
遍历:
l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a'] l2 = [] for i in l1: if not i in l2: l2.append(i) print l2
3.5 给定两个 list A ,B,请用找出 A ,B 中相同的元素,A ,B 中不同的元素
A、B 中相同元素:print(set(A)&set(B)) A、B 中不同元素:print(set(A)^set(B))
3.7 下面这段代码的输出结果是什么?
def extendlist(val, list=[]): list.append(val) return list list1 = extendlist(10) list2 = extendlist(123, []) list3 = extendlist('a') print("list1 = %s" %list1)
print("list2 = %s" %list2)
print("list3 = %s" %list3)
输出:
list1 = [10, 'a'] list2 = [123] list3 = [10, 'a']
3.8.将以下 3 个函数按照执行效率高低排序
def f1(lIn): l1 = sorted(lIn) l2 = [i for i in l1 if i<0.5] return [i*i for i in l2]
3.9 获取 1~100 被 6 整除的偶数?
alist = [] for i in range(1 ,100): if i % 6 == 0: alist.append(i) print(alist)
4. 元祖
tuple:元组,元组将多样的对象集合到一起,不能修改,通过索引进行查找,使用括号”()”;
5. 集合
set:set 集合,在 Python 中的书写方式的{},集合与之前列表、元组类似,可以存储多个数据,但是这些数据是不重复的。
集合对象还支持 union(联合), intersection(交), difference(差)和sysmmetric_difference(对称差集)等数学运算.
快速去除列表中的重复元素
a = [11,22,33,33,44,22,55]
set(a) --》{11, 22, 33, 44, 55}
交集:共有的部分
a = {11,22,33,44,55} b = {22,44,55,66,77} a&b --》{22, 44, 55}
并集:总共的部分
a = {11,22,33,44,55} b = {22,44,55,66,77} a | b --》{11, 22, 33, 44, 55, 66, 77}
差集:另一个集合中没有的部分
a = {11,22,33,44,55} b = {22,44,55,66,77} b - a --》{66, 77}