python学习No.4

浅拷贝和深拷贝

import copy
nums=[1,2,3,4,5]
nums1=nums
nums2=nums.copy()#浅拷贝,两个内容一模一样,但不是同一个对象
nums3=copy.copy(nums)#和num.copy()功夫一致,都是浅拷贝
#深拷贝,只能用copy实现
words=['hello','good',[100,200,300],'yes','hi','ok']
#words1是words的浅拷贝
#浅拷贝只拷贝表面,内层的数据不拷贝,所以当改变内层列表是,words1改变
words1=words.copy()
words[2][0]=1
print(words1)
#深拷贝
words2=copy.deepcopy(words)
words[2][0]=100
print(words2)

从图中可以明显感受到浅拷贝是和深拷贝的区别在这里插入图片描述

元组

元组和列表类似,都是保存多个数据
使用一对小括号()来表示一个元组
元组和列表的区别:列表可变,而元组不可变

num=(1,2,3,4,5,6,4,5,6)
#和列表一样,是一个有序存储数据的容器
#可以通过下标获取元素
print(num[3])
#num[3]=7不可修改
print(num.index(3))#获取下标
print(num.count(5))

用元组表示三门学科的选课学生姓名(一个学生可同时选多门课)
1.求选课总人数

sing=['a','b','c','d','e','f','z','h']
dance=['a','c','d','g','q','t','p','h']
rap=['a','s','m','b','f','e','j','l']
#元组之间可以进行加法运算
new=sing+dance+rap
#使用集合set可以去重
new=set(sing+dance+rap)
new_q=sing+dance+rap
print(len(new))


2.求只选了第一个学科的人的数量和对应的名字


new_a=[]
for p in sing:
    if p not in dance and p not in rap:
        new_a.append(p)
print('只选择第一个学科的有{}人,是{}'.format(len(new_a),new_a) )

3.求只选了一们、两门、三门学科的

new_b={}
for p in new_q:
    if p not in new_b:
        new_b[p]=new_q.count(p)
print(new_b)

字典

前面学习的列表元组都只能保存单一的数据类型,无法对值进行描述。person=[‘张三’,18,99,89,97,180,150]这样的列表让人无法理解具体数据的意义。我们引入字典,字典不仅可以保存值,还可以对值进项描述,用{}表示一个字典。
1.字典不仅有值value,还有值的描述key。
2.字典中的数据都是用key-value的形式保留的
3.key和value之间使用冒号:分割
4.多个键值对之间使用逗号,来分割

person={'name':'zhengsan','age':18,'math':'99',
        'Chinese':89,'English':93,'height':180,
        'weight':'150'
        }
print(person)
字典使用的注意事项
  • 字典里的key不允许重复,如果key重复了,后一个key对应的值会覆盖前一个值
person={'name':'zhengsan',
        'age':18,
        'height':180,
        'weight':150,
        'age':20
        }
print(person)
  • 字典里的value可以是任意类型,但是key只能使用不可变数据类型,一般使用字符串
person={'name':'zhengsan',
        'age':18,
        'height':180,
        'weight':150,
        'age':20,
        'istall':True,
        'hobbies':['唱','跳','篮球'],
        4:'good'
        }
print(person)

字典的增删改查
查找数据

#字典保存时时无序的,不能通过下标获取
#使用key获取对应的value
#不能通过value找key

person={'name':'zhengsan',
        'age':18
       }
print(person['name'])
x='age'
print(person[x])
#如果查找的key不存在,会直接报错
#print(person['height'])
#如果要求没找到,不报错,则使用get()方法
print(person.get('height'))#None
#如果没找到使用给定默认值
print(person.get('gender','female'))
print(person.get('name','lisi'))#找到就不用默认值

字典的增删改

修改新增

person={'name':'zhengsan',
        'age':18
       }
#直接使用key可以修改对应的value
print(person['name'])
person['name']='lisi'
#如果key存在,会修改value
#如果key不在字典里,会在字典中添加一个新的键值对
person['gender']='female'
print(person)

删除

#删除name,是吧name对应的键值删了,执行结果时呗删除的value
person={'name': 'lisi', 'age': 18, 'gender': 'female'}
x=person.pop('name')
print(x)
print(person)
#popitem删除一个元素,结果时被删除的这个元素组成的键值对
y=person.popitem()
print(y)
print(person)
#clear清空
person.clear()
print(person)
字典的合并
#列表中使用extend方法将两个列表合并成一个列表
num1=[1,2,3,4,5]
num2=[10,22,33]
num1.extend(num2)
print(num1)
#而字典中用update
person1={'name':'zhangsan','age':18}
person2={'addr':'lisi','age':19}
person1.update(person2)
print(person1)
#元组,不改变原有的元组,组合新的元组
word1=('hello','sas')
word2=('yes','no')
print(word1+word2)
字典的遍历
#第一种遍历方式
person={'name':'zhangsan','age':18,'height':'180cm'}
for x in person:#for in 循环获取的是key
    print(x,'=',person[x])
#第二种遍历方式:获取到所有的key,然后再遍历key,根据key获取value
print(person.keys())
for k in person.keys():
    print(k,'=',person[k])
#第三种遍历:获取到所有的value
#只拿到值,不要key
for v in person.values():
    print(v)
#第四种遍历方式:
print(person.items())
for item in person.items():#列表里的元素是元组,把元组当作整体进行遍历
    print(item)
    print(item[0],'=',item[1])
#或者拆包
for k,v in person.items():
    print(k,'=',v)
字典小练习

给定列表,计算其中元素出现个数
chars=[‘a’,‘b’,‘c’,‘v’,‘a’,‘b’,‘a’]

chars=['a','b','c','v','a','b','a']
char_count={}
for char in chars:
    if char in char_count:
        char_count[char]+=1
    else:
        char_count[char]=1
print(char_count)
#或者
for char in chars:
    if char not in char_count:
        char_count[char]=chars.count(char)

print(char_count)

已知dict1={“a”:100,“b”:200,“c”:300}改为{100: ‘a’, 200: ‘b’, 300: ‘c’}

dict1={"a":100,"b":200,"c":300}
dict2={}
for k,v in dict1.items():
    dict2[v]=k
print(dict2)
#或者用字典推导式
dict1={v:k for k,v in dict1.items()}
print(dict1)

给定person。让用户输入姓名,如果姓名存在,提示用户,姓名不存在,继续输入年龄,并存入列表里

persons=[
    {'name':'zhangsan','age':18},
    {'name':'lisi','age':20},
    {'name':'wangwu','age':19}
]
name=input('请输入姓名:')
for person in persons:
    if person['name']==name:
        print('存在')
        break
else:
    print('不存在')
    #加入新数据
    new_person={'name':name}
    age=int(input('输入年龄'))
    new_person['age']=age
    persons.append(new_person)
print(persons)


字典推导式理解

dict1={v:k for k,v in dict1.items()}
dict1是个字典,里卖有键值对v,k,而v,k 是从dict1中拿出来的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值