一、list不可循环删除
循环删除列表时,一直改变的是原列表,导致下标错误
l1 = [1, 1, 2, 3, 4, 5, 6]
for i in l1:
if i%2 != 0:
l1.remove(i)
print(l1) # [1, 2, 4, 6]
解决:
用新的变量接收原有数据进行删除 ,循环原有的列表,下标一直不变,拿到值
l1 = [1, 1, 2, 3, 4, 5, 6]
l2 = [1, 1, 2, 3, 4, 5, 6]
for i in l1:
if i%2 != 0:
l2.remove(i)
print(l2) # [2, 4, 6]
二、浅拷贝
l1 = l2 (浅拷贝,直接赋值,内存地址是一样的,对象一样,改变l1也会改变l2)
l2 = l1.copy() (浅拷贝) 内存地址不一样,但是只是表层不影响,深层会影响到
l3 = [1, 1, 2, 3, [4, 5, 6]]
l4 = l3.copy()
l4[-1].append('d')
l3.append('111')
print(l4)
print(l3)
三、深拷贝
import copy
l5 = [1, 1, 2, 3, [4, 5, 6]]
l6 = copy.deepcopy(l5)
l6[-1].append('d')
l5.append('111')
print(l5) # [1, 1, 2, 3, [4, 5, 6], '111']
print(l6) # [1, 1, 2, 3, [4, 5, 6, 'd']]
注:l7 = l5[:] # 也是深拷贝
四、多维数组取值
wsc = {
'money': 1900,
'house': {
'beijing': ['三环', '四环', '五环'],
'shanghai': ['静安', '浦东新区'],
},
'car': ['bmw', 'benz', 'audi', 'byd'],
'pets': [
{'name': 'xiaohei', 'type':'dog'},
{'name': 'xiaobai', 'type':'cat'},
{'name': 'xiaofen', 'type':'cat'},
{'name': 'xiaolan', 'type':'dog'}
]
}
# 买了一辆五菱宏光
wsc['car'].append('五菱宏光')
# 在杭州西湖区买了房子
wsc['house']['hangzhou'] = '西湖区'
# 卖掉北京5环的房子 钱增加了500万
wsc['house']['beijing'].remove('五环')
wsc['money'] += 5000000
# 收养了一只叫咪咪的猫
wsc['pets'].append({'name': '咪咪', 'type': 'cat'})
# 统计他总共有几辆车
print(len(wsc['car']))
print(wsc)
五、内置函数
1、函数即变量
# 函数即变量
def test():
pass
abc = test
abc() # 相当于test()
2、sorted排序
# sorted 默认升序
# sorted(l1,reverse=True)
s = '421613'
print(sorted(s)) # 返回list
3、join将list转成字符串
# 如何将list转换成字符串-------------join
# join是通过某个字符串,把list里面的每个元素链接起来,返回一个新的字符串
print(''.join(sorted(s)))
l1 = ''.join(sorted(s))
4、精简循环list,将list转成字符串
l3 = [str(i) for i in l1]
print(l3)
5、匿名函数lambda
# 匿名函数-----lambda
chuxu = lambda a, b: a+b
6、获取字典的key和value
d = {'wsc': 100, 'chuxu': 101, 'xb': 99}
# 第一种循环取值-------items将字典转成list
for k, v in d.items():
print(k, v)
# 第二种------直接循环字典,然后利用得到的key,用get(k) 方法来取值
for k in d:
print(k, d.get(k))
7、对字典进行排序
# 对字典进行排序--------字典是无序的
# 1、先转为list有序 2、key就是多维数组里确定按什么来排序
print(sorted(d.items(), key=lambda a: a[-1], reverse=True))
8、list的内置函数
l2 = [4, 1, 3, 5, 8, 1, 79, 54]
print(max(l2))
print(min(l2))
print(sum(l2))
print(len(l2))
print(chr(10)) # 打印数字的ascii码
print(ord('b')) # 打印字母的ascii码
print(dir(l2)) # 查询传入对象的所有方法
print(reversed(l2)) # 反转
print(all([1, 2, 4])) # 非空即真 非零即真 list只要有一个为假就返回False
print(any(['', [], 0, 1])) # 非空即真 非零即真 list只要有一个为真就返回True
# zip合并至少两个list
name = ['xw', 'xh', 'qw']
print(list(zip(l2, name))) # zip转成列表
print(dict(zip(name, l2))) # zip转成字典
9、locals()方法
def my():
name = 1
age = 2
print(locals()) # 返回当前的局部变量 返回的数据类型是dict key:value
my()
10、map() 循环调用函数
l2 = [1, 2, 3, 5]
def int_to_str(s):
return str(s)
print(list(map(int_to_str, l2)))
11、filter() 过滤
def gulv(item):
age = item.get('age')
if age<25:
return True
res = list(filter(gulv, person)) # 过滤大于等于25周岁的数据
print(res)
六、random模块
import random
num = random.randint(1, 10) # 随机整数
f = random.uniform(1, 100) # 随机小数
# 保留几位小数
print(round(f, 2)) # 保留两位小数
l1 = [1, 2, 3, 4, 5, 6, 6]
s = 'aewqqrqwr31'
# 随机选择n个元素
print(random.sample(s, 2))
print(random.sample(l1, 4))
# 随机取一个
print(random.choice(s))
# 洗牌 也就是打乱顺序 且没有返回值 会改变原有的数据 不可传字符串
random.shuffle(l1)