01-去掉列表或者元组中重复的元素
一 在python中如何定义集合,集合与列表有何区别
二 如何去掉列表(元组)中重复的元素
答
一
a = [1,2,3] #列表
b = (1,2,3) #元组
c = {1,2,3} #集合
集合和列表区别:
1.列表可以有重复元素,集合没有重复元素
2.集合中的元素和顺序无关,列表中的元素和顺序有关
二
把列表(元组)转换成集合,再转换回去
例如:
a = [1,3,3,3,4]
b = list(set(a))
02-集合的并集与交集
一 如何向集合中添加或者删除元素,需要注意什么
二 如何求集合之间的并、交,集合之间还有什么操作
答:
一
1.添加是add()函数,删除是remove()函数
例如:x={1,3,4,5}
x.add(2)
x.remove(1)
2.进行删除操作时要先判断在集合里存不存在这个元素
例如:
if x.__contains__(1):
x.remove(1)
else:
pass
二
1.并集:x1 | x2 或者 x1.union(x2)
交集:x1 & x2 或者 x1.intersection(x2)
2.x1.difference(x2) #x1中有,而x2中没有的
x1 ^ x2 #刨除x1和x2共有的元素
03-两个列表首尾相接
一 连接两个列表的方式有哪些
二 这些连接方式有什么区别
答:
一
1.直接相加或者使用extend()函数,例如a.extend(b)
元组首尾相接可以直接相加,但不能用extend
2.加号不会改变原来列表的值,但extend会改变原来列表的值
加号两边要同样的类型,extend可以连接列表和元组,但是只能元组在后面作为参数
04-乱序列表
一 编写一个函数打乱列表元素
二 如何对列表元素进行随机排列
答:
一
1.
import random
'''
循环一百次,每次都随机互换两个数
'''
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
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
b = random_list1(a)
print(b)
'''
创建一个新的空列表,每次随机选一个出来加进去
'''
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
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])
del a_copy[index]
return result
b = random_list2(a)
print(b)
二
使用random.shuffle()函数
例如
def random_list2(a):
random.shuffle(a)
return a
05-单星和双星运算符
一 单星(*)和双星(**)运算符的作用,并举例说明
二 请描述合并列表和合并字典的方法有哪些
答:
一
单星(*):
1.以元组方式导入
2.可变参数(参数数量可变)
3.如果可变参数不是最后一个参数,那么可变参数后面的形参指定参数值,一定要用命名参数
例如:
def fun1(param1, *param2,x):
pass
fun1(1,2,3,4,6,7,x=8)
双星(**):
以字典方式导入
例如:
def fun2(param1,**param2):
pass
dun2(1,a=1,b=2,c=3)
二
星号(*)和双星号(**)也能解引用
例如:
合并a和b
a=[1,2,3]
b=[4,5,6]
c=[*a,*b]
合并A和B
A={'A':1,'B':2}
B={'C':3,'D':4}
C={**A,**B}
06-快速调换字典中的key和value
一 如何快速调换字典中的key和value
二 如何循环快速生成一个从0到100的列表
答:
一
D={'A':1,'B':2}
E={v:k for k,v in D}
二
A=[i for i in range(0,101)]
07-将两个列表(元组)合并成一个字典
一 如何将下面两个列表合并成一个字典
a = ["a","b"]
b = [1,2]
合并后:{"a":1,"b":2}
答:
一
用zip和dict函数(先用zip压缩,接着用dict转换成字典)
例如 dict(zip(a,b))
假如:
c = [[1,2],[3,4]]
可以用循环先把每一维的列表合并成字典,然后append进一个列表里
例如:
c = [[1, 2], [3, 4]]
a = ["a", "b"]
r = []
for li in c:
d = dict(zip(a, li))
r.append(d)
print(r)
08-列表和元组区别
一 请详细描述列表和元组的区别
答:
一
1.语法差异
a = (1,2,3,4) #元组
b = [1,2,3,4] #列表
2.元组是只读的,列表是可读写的
3.拷贝出来副本的性质不一样(使用tuple函数后,元组仍然为自身;使用list函数后,会复制一个新列表)
copy_a = tuple(a)
copy_b = list(b)
print(copy_a is a) #True
print(copy_b is b) #False
4.大小不一样,元组比较小,因为元组使用比较大的内存块,当元素比较多时,元组速度更快
print(a.__sizeof__())
print(b.__sizeof__())
09-如何排序一个列表
一 对列表排序有几种方法
二 列表的sort方法和sorted函数都可以对列表进行排序,他们有什么区别
三 如何倒序排列一个列表
答:
一
可以用列表自带的sort方法,也可以用sorted函数
二
sort方法是改变列表自身,sorted函数并不会改变列表本身,返回一个列表副本
三
降序排列(把sort方法和sorted函数的reverse属性改为true就可以了)
例如:
a.sort(reverse=true)
sorted(a, reverse=true)
10-列表元素是对象,该怎么进行排序
一 如果列表元素是对象,对这样的列表排序有什么方法
二 如果列表元素是对象,对这样的列表进行倒序排列的方法有哪些
答:
1.类的magic方法
2.operator模块
3.sort方法和sorted函数
一
1.相关magic方法有__lt__,__gt___,前期太乱就只记__lt__用法吧
class myClass:
def __init__(self, value):
self.value = value
def __lt__(self, other):
return other.value > self.value
#当满足__lt__函数的条件,使用sort方法,或者sorted函数排序时,当前类在左边,不满足magic函数时当前类在右边
#当满足__gt__函数的条件,使用sort方法,或者sorted函数排序时,当前类在右边,不满足magic函数时当前类在左边
2.使用operator函数
例如:
import operator
a.sort(key=operator.attrgetter("value") #参数要加双引号
或者sorted(a,key=operator.attrgetter("value")
二
1.magic方法
def __lt__(self, other):
return self.value > other.value
2.operater方法
import operater
a.sort(key=operater.attrgetter("value"),reverse=True)
11-del和pop的区别
一 del和pop都可以用来删除列表元素,他们有什么区别
答:
del 根据索引删除元素,并且没有返回值
del a[2]
pop 根据索引弹出列表元素,返回并删除该元素,
a.pop(2)
a.pop() #没有指定参数时弹出列表最后一个
12-用lambda函数对列表进行排序
一 如果列表元素是字典,如何使用lambda表达式对列表进行升序降序排列
答:
一
a = [
{"name": "Mike", "age": 112},
{"name": "Jack", "age": 23}
]
print(sorted(a, key=lambda x: x["age"])) #降序后面加reverse
13-字典键值支持的数据类型
一 有哪些键值不能作为字典键值的数据类型
二 为什么列表和字典类型的值不能作为字典的键值
答:
一 列表和字典不能作为字典键值
二 因为字典的键值key是不能变的
14-对产生器类型的对象使用切片
一 如何使用切片获取产生器类型对象中的部分元素
答:
一
其实不是很懂什么叫生成器,反正就是理解成存放大量数据时列表很耗空间,用生成器可以节省空间
回到题目,itertools模块中的islice函数可以使用分片获取产生器类型对象中的部分元素
islice函数的第一个参数是产生器,第二个参数是开始索引,第三个参数是结束索引下一个元素的索引
from itertools import islice
gen = iter(range(10))
print type(gen)
for i in islice(gen,2,6):
print(i)
15-将循环参数的列表变成产生器
一 如何将【i for i in range(10)]变成产生器
答:
把方括号改为括号就好了,(i for i in range(10))
注意里面要有for,不然就变成元组了
16-python字典和json字符串怎么互换
一 python字典和json字符串如何互转
答:
字典转json:
import json
json_str=json,dumps(d)
json转字典:
import json
d = json.loads(json_str)