博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day07-深浅拷贝 set集合
阅读量:7263 次
发布时间:2019-06-29

本文共 5256 字,大约阅读时间需要 17 分钟。

数据类型的补充

 编码转换

    # s1 = '中国'

    # b1 = s1.encode('utf-8')
    # # print(b1)-------------->b'\xe4\xb8\xad\xe5\x9b\xbd'
 utf-8 bytes --->gbk bytes
    # s2 = b1.decode('utf-8')
    # # print(s2)---------------中国
    # b2 = s2.encode('gbk')
    # print(b2)------------------b'\xd6\xd0\xb9\xfa'

 

    

 数据类型的补充

    1,元组

    tu1 = ('laonanhai')

    tu2 = ('laonanhai',)
    print(tu1,type(tu1))-----------laonanhai <class 'str'>
    print(tu2,type(tu2))-----------('laonanhai',) <class 'tuple'>

    tu1 = (1)

    tu2 = (1,)
    print(tu1,type(tu1))-------------1 <class 'int'>
    print(tu2,type(tu2))(1,) -----------<class 'tuple'>

 元组里面如果只有一个元素且没有逗号,则该数据的数据类型与里面的元素相同

    tu1 = ([1, 2, 3])
    tu2 = ([1, 2, 3])
    print(tu1, type(tu1))----------[1, 2, 3] <class 'list'>
    print(tu2, type(tu2))----------[1, 2, 3] <class 'list'>

 

 list

    l1 = [111, 222, 333, 444, 555,]

    索引为奇数对应的所有元素全部删除

    del l1[1::2]
    print(l1)--------------[111, 333, 555] 

***在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果

倒着删除

for index in range(len(l1)-1,-1,-1):

    if index % 2 == 1:

        del l1[index]

print(l1)--------------------[111, 333, 555]

 

dict

dic = dict.fromkeys('abc',666)

print(dic)-----------------{'a': 666, 'b': 666, 'c': 666}

dic = dict.fromkeys([11, 22, 33],666)

print(dic)--------------------{11: 666, 22: 666, 33: 666}

dic = dict.fromkeys([1, 2, 3], [])

dic[3].append(666)

print(dic)----------------------{1: [666], 2: [666], 3: [666]}

 

***在循环dict中,最好不要改变dict的大小,会影响结果或者报错。

dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3','name': 'alex'}for i in dic:

if 'k' in i:

    del dic[i]

l1 = []

for key in dic:

    if 'k' in key:

        l1.append(key)

print(l1)

for key in l1:

    del dic[key]

print(dic)---------------------报错(原因是字典在迭代过程中改变大小)

 

数据类型的转换
str----------->list    split
list--------->str       join
tuple-------->list
tu1 = (1, 2, 3)
l1 = list(tu1)
print(l1)------------------[1, 2, 3]
tu2 = tuple(l1)
print(tu2)----------------(1, 2, 3)

dic----------->list     list(dic)(列表中的元素只有key)

dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',}

l1 = list(dic)
print(l1)------------------------['k1', 'k2', 'k3']
print(list(dic.keys()))------------['k1', 'k2', 'k3']
print(list(dic.values()))------------['v1', 'v2', 'v3']
print(list(dic.items()))---------------[('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]

0, '', [], () {}  ---> bool 都是Fasle

print(bool([0, 0, 0]))------------True

集合

    集合本身是可变的数据类型,不可hash,有增删改查操作
    set集合是python中的一个基本数据类型
    set中的元素是不重复的,无序的,里面的元素必须是可hash的(int,str,tuple,bool)
    set就是dict类型的数据但是不保存value

set集合的增删改查

1增加

.add()

s = {"刘嘉玲", '关之琳', "王祖贤"}

s.add("郑裕玲")

print(s)

s.add("郑裕玲")    # 重复的内容不会被添加到set集合中

print(s)

s = {"刘嘉玲", '关之琳', "王祖贤"}

s.update("麻花藤")    # 迭代更新

print(s)

2.删除

s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"}

item = s.pop()  # 随机弹出⼀一个.

s.remove("关之琳") # 直接删除元素

# s.remove("⻢马⻁虎疼") # 不存在这个元素. 删除会报错

s.clear()    # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和 dict区分的.

3.修改

 set集合中的数据没有索引. 也没有办法去定位一个元素. 所以没有办法进行直接修改.

# 我们可以采用先删除后添加的方式来完成修改操作

s.remove("刘嘉玲")

s.add("赵本山")

4.查询

# set是⼀一个可迭代对象. 所以可以进行for循环

for el in s:   

print(el)

 

set集合本身是可以发生改变的. 是不可hash的. 我们可以使用frozenset来保存数据.

frozenset是不可变的. 也就是⼀个可哈希的数据类型

 

深浅拷贝

浅拷贝. 只会拷贝第⼀层. 第二层的内容不会拷贝. 所以被称为浅拷贝

lst1 = ["何炅", "杜海海涛","周渝⺠民", ["麻花藤", "⻢马芸", "周笔畅"]]

lst2 = lst1.copy()

 深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生⼀个改变另⼀个跟着 改变的问题

import copy
lst1 = ["何炅", "杜海海涛","周渝⺠民", ["麻花藤", "⻢马芸", "周笔畅"]]

lst2 = copy.deepcopy(lst1)

Day07——作业

1.判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数.

 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3

 

n = input("请输入一个三位数:")  # 156

s = int(n[0])**3 + int(n[1])**3 + int(n[2]) ** 3

if int(n) == s:

    print("是水仙花数")

else:

    print("不是")

 

2.给出一个纯数字列表. 请对列表进行排序(升级题).
思路:
1.完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
2.循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换. 循环结束的时候.
当前列表中最大的数据就会被移动到最右端.
3.想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端. 以此类推.
如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表.

#①

lst = [88,5,8,6,1,23]
for a in range(len(lst)):   # 记录内部排序的次数
    i = 0
    while i < len(lst) - 1: # 把最大值移动到右端
        if lst[i] > lst[i+1]:   # 比较,
            lst[i], lst[i+1] = lst[i+1], lst[i] # 交换
        i = i + 1
print(lst)
#②
lis=[12,3,5,8,2,45,1]
for n in range(len(lis)):
    for i in range(len(lis)-1):
        if lis[i]>lis[i+1]:
            lis[i],lis[i+1]=lis[i+1],lis[i]
print(lis)

3.完成彩票36选7的功能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.
随机数:
from random import randint
randint(0, 20) # 0 - 20 的随机数

from random import randint

lst = []

n = 1

c = 0

a = ""

while n <= 7:

    b = randint(1, 36)

    if b in lst:

        continue

    else:

        lst.append(b)

        n = n+1

        a = a + " " + str(lst[c])

        c += 1

print("开奖结果为%s" % (a), end = "")

4. 税务部门征收所得税. 规定如下: 
        1). 收入在2000以下的. 免征.
        2). 收入在2000-4000的, 超过2000部分要征收3%的税. 
        3). 收入在4000-6000的, 超过4000部分要征收5%的税.
        4). 收入在6000-10000的, 超过6000部分要征收8%的税.  
        4). 收入在10000以上的, 超过部分征收20%的税. 
    注, 如果一个人的收入是8000, 那么他要交2000到4000的税加上4000到6000的税加上6000到8000的税. 
        收入 = 8000-(4000-2000)*3%-(6000-4000)*4%-(8000-6000)*8%
让用户输入它的工资, 计算最终用户拿到手是多少钱.

 

num = int(input("请输入你的工资:"))

if num <= 2000:

    print("你的工资是%s"%(num))

if 2000 < num <= 4000:

    num -= (num-2000)*0.03

    print("你的工资是%s" % (num))

if 4000 < num <= 6000:

    num -= (4000-2000)*0.03-(num-4000)*0.05

    print("你的工资是%s" % (num))

if 6000 < num <= 10000:

    num -= (4000-2000)*0.03-(6000-4000)*0.05-(num-6000)*0.08

    print("你的工资是%s" % (num))

if num>10000:

    num -=  (4000 - 2000) * 0.03 - (6000 - 4000) * 0.05 - (10000 - 6000) * 0.08-(num-10000)*0.2

    print("你的工资是%s" % (num))

 

转载于:https://www.cnblogs.com/lixin012007/p/9681691.html

你可能感兴趣的文章
vue.js element-ui 高德地图 选取坐标 dialog
查看>>
More than React(二)组件对复用性有害?
查看>>
健壮性V.S.准确率——18个深度图像分类模型的健壮性综述
查看>>
Creating Great Teams作者问答
查看>>
ODE网络:一场颠覆RNN的革命即将到来
查看>>
微软正式发布PowerShell Core 6.0
查看>>
机器人操作系统来到Windows
查看>>
新书问答:Software Wasteland
查看>>
分布式系统的开发经验与心得
查看>>
IBM技术专家:Hyperleger Fabric 架构与部署实例解析
查看>>
IBM借QISKit打造基于云平台的量子计算
查看>>
嵌入式系统开发: 主流厂商的SmartConfig技术对比
查看>>
有赞融资10亿港元 腾讯领投加紧布局产业互联网
查看>>
WebStorm 2017.1增加对Vue.js的支持
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
红帽收购混合云管理提供商NooBaa,混合云爆发节点临近!
查看>>
腾讯云自主可控数据库TDSQL的架构演进\n
查看>>
时隔25年重访 Linus:流量时代的“技术大师”
查看>>
.NET特性:异步流
查看>>
BitKeeper 7.3发布,新增从Git快速导入等功能
查看>>