Python面试一百题——列表、元组与字典(1)

目录

  1. 去掉列表或元组中的重复元素
  2. 集合之间的并集与交集
  3. 如何让两个列表首尾相连(保留重复的元素值)
  4. 打乱列表元素顺序的方式
  5. 单星与双星运算符的作用
  6. 快速调换字典中的 key 和 value
  7. 将两个列表或元组合并成一个字典
  8. 列表与元组的差异
  9. 如何对列表进行排序
  10. 如果列表元素是对象,如何排序

01.去掉列表或元组中的重复元素

在这里插入图片描述
区别:

  1. 列表可以有重复元素,集合没有
  2. 集合中的元素与顺序无关,列表中的元素与顺序有关
#去掉列表(元组)中重复元素
a = [1, 2, 2, 3, 4]
a_result = list(set(a))

总结
在这里插入图片描述

02.集合之间的并集与交集

在这里插入图片描述
需要注意删除的元素是否存在

x1 = {1, 2, 3}
x2 = {3, 4, 5}
#并集
print(x1 | x2) # 或者x1.union(x2)
#交集
print(x1 & x2)	# 或者x1.intersection(x2)
#其他操作
print(x1 - x2) # x1.difference(x2) x1中有但x2中没有
print(x1 ^ x2) # 在x1和x2中不同时都有的

总结
在这里插入图片描述

03.如何让两个列表首尾相连(保留重复的元素值)

在这里插入图片描述

#连接列表:+和extend 	连接元组:+
a = [1, 5, 7, 9, 6]
b = [2, 3, 3, 6, 8]

print(a + b)
[1, 5, 7, 9, 6, 2, 3, 3, 6, 8]
a.extend(b)
print(a)
[1, 5, 7, 9, 6, 2, 3, 3, 6, 8]

#差异
'''
1.+不会改变参与连接列表的值,但extend会改变a的值
2.+两侧要么都是元组要么都是列表,但列表的extend方法可以将一个元组添加到列表后
'''

总结
在这里插入图片描述

04.打乱列表元素顺序的方式

在这里插入图片描述

import random
#方法一
def random_list1(a):
    for i in range(0, 100):
        index1 = random.randint(0, len(a) - 1)
        index2 = random.randint(0, len(a) - 1)
        a[index1], a[index2] = a[index2], a[index1]
    return a
#方法二
def random_list2(a):
    a_copy = a.copy()
    result = []
    for i in range(0, len(a)):
        index = random.randint(0, len(a_copy) - 1)
        result.append(a_copy[index])
        a_copy.pop(index)
    return result

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
b = random_list1(a)
c = random_list2(a)
print(b)
print(c)

#第二题
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
random.shuffle(a)

总结
在这里插入图片描述
这个方法会改变原列表里的元素顺序

05.单星与双星运算符的作用

在这里插入图片描述

#单星(*)
#以元组形式导入,可变参数
#如果最后一个参数不是可变参数,那么为可变参数后面的形参指定参数值,必须用命名参数
def fun1(param1, *param2):
    print('param1:', param1)
    print('param2:', param2, type(param2))

fun1(1, 2, 3, 4, 5)

param1: 1
param2: (2, 3, 4, 5) <class 'tuple'>

#双星(**)
#以字典形式导入 key 和 value
def fun2(param1, **param2):
    print('param1:', param1)
    print('param2:', param2, type(param2))

fun2(1, a = 2, b = 3, c = 4, d = 5)

param1: 1
param2: {'a': 2, 'b': 3, 'c': 4, 'd': 5} <class 'dict'>

#合并列表和字典
a = [1, 2, 3]
b = [4, 5, 6]

x1 = [a, b]	#[[1, 2, 3], [4, 5, 6]]
x2 = [*a, *b]	#[1, 2, 3, 4, 5, 6]

a = {'A': 1, 'B': 2}
b = {'C': 3, 'D': 4}

x = {**a, **b}	# {'A': 1, 'B': 2, 'C': 3, 'D': 4}

总结
在这里插入图片描述

06.快速调换字典中的 key 和 value

在这里插入图片描述

a = {'A': 1, 'B': 2}

print({v: k for k, v in a.items()})
{1: 'A', 2: 'B'}

#第二题
a = [i for i in range(101)]

07.将两个列表或元组合并成一个字典

在这里插入图片描述

#列表
a = ['a', 'b']
b = [1, 2]

print(dict(zip(a, b)))
{'a': 1, 'b': 2}
#元组
fields = ('id', 'name', 'age')
records = [['01', 'Bill', '20'], ['02', 'Mike', '30']]
result = []
'''
[
{'id': '01', 'name': 'Bill', 'age': '20'}
{'id': '02', 'name': 'Mike', 'age': '30'}
]
'''

for record in records:
    result.append(dict(zip(fields, record)))
print(result)
[{'id': '01', 'name': 'Bill', 'age': '20'}, {'id': '02', 'name': 'Mike', 'age': '30'}]

总结
在这里插入图片描述

08.列表与元组的差异

在这里插入图片描述

#4个区别

#1:语法差异
a = (1, 2, 3)
b = [1, 2, 3]

#2:元组是只读的,列表可读写

#3:
copy_a = tuple(a)
copy_b = list(b)
print(a is copy_a)	# True
print(b is copy_b)	# False

#4:大小不同
print(a.__sizeof__())	#48
print(b.__sizeof__())	#64

总结
在这里插入图片描述

09.如何对列表进行排序

在这里插入图片描述

#排序列表的方法
a = [3, 2, 5, 6, 7, 9, 11]
a.sort()
print(a)	# [2, 3, 5, 6, 7, 9, 11]

b = [3, 2, 5, 6, 7, 9, 11]
c = sorted(b)
print(b)	# [2, 3, 5, 6, 7, 9, 11]
'''
区别:
1.sort属于列表方法,sorted是独立函数
2.sort改变列表本身,sorted返回一个排好序的列表副本
'''

#倒叙排列列表
a.sort(reverse= True)
print(a)

print(sorted(b, reverse= True))

总结
在这里插入图片描述

10.如果列表元素是对象,如何排序

在这里插入图片描述

#方法一:Magic方法
class MyClass:
    def __init__(self):
        self.value = 0
    #定义大于号
    def __gt__(self, other):
        return self.value > other.value
    '''
    #定义小于号
    def __lt__(self, other):
        return self.value < other.value
    '''

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [my1, my2, my3]
print(a)

a.sort()

print(a[0].value)	#10
print(a[1].value)	#20
print(a[2].value)	#30

#方法二:operator模块
class MyClass:
    def __init__(self):
        self.value = 0

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [my1, my2, my3]
print(a)

import operator

a.sort(key= operator.attrgetter('value'))
b = sorted(a, key= operator.attrgetter('value'))

#第一题
print(a[0].value)	#10
print(a[1].value)	#20
print(a[2].value)	#30
print(b[0].value)	#10

#第二题
#Magic方法
class MyClass:
    def __init__(self):
        self.value = 0
    '''
    def __gt__(self, other):
        return self.value > other.value
    '''
    def __lt__(self, other):
        return self.value > other.value	#此处<号改为>号


my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [my1, my2, my3]
print(a)

a.sort()

print(a[0].value)	#30
print(a[1].value)	#20
print(a[2].value)	#10

#reverse= True
a.sort(key= operator.attrgetter('value'), reverse= True)
b = sorted(a, key= operator.attrgetter('value'), reverse= True)

总结
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值