04.python面试之数据类型

python的数据类型有:字符串、整型、列表、元组、字典、布尔型等等。数据类型是编程语言必备的属性,只有给数据赋予明确的数据类型,计算机才能对数据进行处理运算。

现有字典 d= {‘a’:24,’g’:52,’i’:12,’k’:33}请按value值进行排序?

1
2
3
4
5
6
7
8
9
# 使用内置函数sorted
d= {'a':24,'g':52,'i':12,'k':33}
# 将字典每一项转为元组,然后以元组第二个值进行排序
list_tuple = sorted(d.items(), key =lambda item:item[1])
results = {}
# 循环排序后的列表,元组的两个值分别赋值给字典的键和值
for item in list_tuple:
results[item[0]] = item[1]
print(results)
{'i': 12, 'a': 24, 'k': 33, 'g': 52}
1
2
3
4
5
6
7
8
9
# 使用列表自带的sort进行排序
d= {'a':24,'g':52,'i':12,'k':33}
# 字典转为dict_items再转成列表
list_tuple = list(d.items())
# 列表自带的sort对每项中的第二个元素进行排序
list_tuple.sort(key=lambda item:item[1])
# 使用字典推导式,元组的两个值分别赋值给字典的键和值
results = {key:value for key, value in list_tuple}
print(results)
{'i': 12, 'a': 24, 'k': 33, 'g': 52}

字典推导式

1
d = {key:value for (key,value) in iterable}

请反转字符串 “aStr”?

1
2
# 使用切片反转
'aStr'[::-1]
'rtSa'
1
2
# 使用reversed
"".join(list(reversed("aStr")))
'rtSa'

将字符串 “k:1|k1:2|k2:3|k3:4”,处理成字典 {k:1,k1:2,…}

1
2
3
4
5
6
7
8
9
# 部分使用字典推导式推导式
s = "k:1|k1:2|k2:3|k3:4"
# 以|分割转为列表
s_list = s.split('|')
# 使用map,以:分割为列表
result_list = list(map(lambda item:item.split(':'), s_list))
# 使用字典推导式循环列表,生成字典
result_dict = {k:int(v) for k,v in result_list}
result_dict
{'k': 1, 'k1': 2, 'k2': 3, 'k3': 4}
1
2
3
4
# 全部用字典推导式,一行代码实现
s = "k:1|k1:2|k2:3|k3:4"
results = {k:int(v) for item in s.split('|') for k,v in [item.split(':'), ]}
print(results)
{'k': 1, 'k1': 2, 'k2': 3, 'k3': 4}
1
2
3
s = "k:1|k1:2|k2:3|k3:4"
results = {item.split(':')[0]:int(item.split(':')[1]) for item in s.split('|')}
print(results)
{'k': 1, 'k1': 2, 'k2': 3, 'k3': 4}

请按alist中元素的age由大到小排序

1
2
3
4
# 使用list.sort方法
alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
alist.sort(key=lambda item:item["age"], reverse=True)
alist
[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]
1
2
3
4
# 使用内置方法sorted
alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
results = list(sorted(alist, key=lambda item:item["age"], reverse=True))
results
[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]

下面代码的输出结果将是什么?

1
2
lis1 = ['a','b','c','d','e']
print(lis1[10:])

以上代码表示从第10个元素开始取,一直取到最后,但是list不足10个元素,所以最后取出来是一个空列表

1
2
lis1 = ['a','b','c','d','e']
print(lis1[10:])
[]

写一个列表生成式,产生一个公差为11的等差数列

1
2
3
4
# 100以内公差为11的生成式等差数列
g_list = (item for item in range(0, 100, 11))
for i in g_list:
print(i)
0
11
22
33
44
55
66
77
88
99
1
2
3
4
# 列出10位公差为11的等差数列生成式
g_list = (item*11 for item in range(10))
for i in g_list:
print(i)
0
11
22
33
44
55
66
77
88
99

给定两个列表,怎么找出他们相同的元素和不同的元素?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
lis1 = [1,2,3]
lis2 = [3,4,5]
# 转为集合
# 求交集和差集
set1 = set(lis1)
set2 = set(lis2)
# 并集
print(set1.union(set2))
# 差集
print(set1.symmetric_difference(set2))
# 使用^求set1和set2的差集
print(set1 ^ set2)

# set1中包含,set2中不包含的元素
print(set1.difference(set2))
# set2中包含,set1中不包含的元素
print(set2.difference(set1))

# 交集
print(set1.intersection(set2))
# 使用&求交集
set1 & set2
{1, 2, 3, 4, 5}
{1, 2, 4, 5}
{1, 2, 4, 5}
{1, 2}
{4, 5}
{3}





{3}

请写出一段python代码实现删除list里面的重复元素?

1
l1 = ['b','c','d','c','a','a']
1
2
3
# 使用集合去重
l1 = ['b','c','d','c','a','a']
set(l1)
{'a', 'b', 'c', 'd'}
1
2
3
# 利用字典键唯一的特性
results = dict.fromkeys(l1).keys()
print(results)
dict_keys(['b', 'c', 'd', 'a'])
1
2
3
4
5
6
7
8
# 最笨方法,循环取
l1 = ['b','c','d','c','a','a']
results = []
for i in l1:
if i not in results:
results.append(i)
results

['b', 'c', 'd', 'a']