zoukankan      html  css  js  c++  java
  • Python 基础第七天

     

    今日主要内容:

    1.数据类型补充

    2.集合set和用法

    3.深浅copy

    4.编码的补充

     

    1.数据类型的补充

    tuple(元组)

    1)元组内如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么类型.

    例:

    tu = (1)
    tu1 = (1,)
    print(tu,type(tu))
    print(tu1,type(tu1))

    tu = ('老男孩')
    tu1 = ('老男孩',)
    print(tu,type(tu))
    print(tu1,type(tu1))

    tu = ([1,2,3])

    tu1 = ([1,2,3],)

    print(tu,type(tu))
    print(tu1,type(tu1))

    2)list(列表)

    在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易出错。

    例:

    li = [11,22,33,44,55]  将索引为奇数的元素删除。

    法一:

    del li[1::2]
    print(li)

    法二:

    for i in range(len(li)-1,-1,-1): #倒叙删除,使用步长(起始点,终点,步长)
       if i % 2 == 1:
       del li[i]
     print(li)

    解释:由于for从后向前遍历,当删除操作进行的时候,删除的是从后开始的奇数,所以不影响正序的索引.

    法三:

     l1 = []
     for i in li:
       if li.index(i) % 2 == 0:
       l1.append(i)
     li = l1
     print(li)

     

    dict(字典)

    1)新方法:fromkeys:创建新字典,前面列的是key,后面是values

    例:

    例2:如果values是空列表,则出现如下现象:

    为了节省内存空间,所创建的空列表公用一个内存地址.

     

    例题:

    dic = {'k1':'value1','k2':'value2','name':'wusir'}
    将字典中含有k元素的键,对应的键值对删除。

     

    for i in dic:

     if 'k' in i:
     del dic[i]

    报错:IndentationError: expected an indented block

    结论:

    在循环字典中,不能增加或者删除此字典的键值对。如果需要删除此键值对需要跳出此字典的循环,方法如下:

    l1 = []
     for i in dic:
       if 'k' in i:
       l1.append(i)
     for i in l1:
       del dic[i]
     print(dic)

    解析:先循环找到要删除的K值,然后把这些值放到空列表中,在循环该列表,用删除key的方法,删除键值对.

    数据转换

    list --> tuple

    l1 = [1,2,3]
    tu1 = tuple(l1)
    print(tu1)

    tuple ---> list

    tu = (1,2,3)
    li = list(tu)
    print(li)

    元组转换字符串

    tuple ---> str

    tu = ('wusir','老男孩')
    s = " ".join(tu)
    print(s)

    2.集合(set)和用法

    什么是集合:是一些不重复,无序的可哈希的数据构成,本是是不可哈希的,不能作为字典的key使用.

    作用:

    1.进行元素去重

    2.数据关系的测试(计算交集/并集/差集)

     

    1)去重

    例1.给列表出重

    例2.本是有重复元素,输出时全部去重

     

    集合的增加:

    1.无序增加(add)

    例3:对比是否无序增加

    2.迭代增加 (update)

    例4:展示迭代增加的现象

    集合的删除

    1.根据集合内元素名称删除(remove)

    例5:

    2.随机删除,能有返回值(pop)

     例6:对比查看是否为随机

     

    3.清空集合(set)

    例7:

    4.删除集合(del)

    例8:

    查看元素

    1.只能使用for循环,遍历集合

    例9:

    4.显示交集(&/intersection) (表示有多少相同元素)
    例10:

    字符串同样适用:

    se = {'alex'}  
    se1 = {'jason'}
    print(se & se1) #此种形式不适用
    例11:

    5.显示反交集(^ /symmetric_difference)(表示有多少不同元素)

    例12:

     

    6.显示并集(|/unico)(合并两个集合,显示合并后的集合,重复的去重.)

    例13:

    7.显示差集(-)(两个集合的差,第一个集合减去第二个集合重复的元素,第一个集合剩下的元素)

    例14:

    8.子集和超集(issubset)

    例15:

    8.将集合set转化成不可变的集合frozenset

    转化之后集合元素固定,只能通过for查看,并且可以作为字典的key,也可以作为其他集合的元素

    例:16

     

     深浅copy

    1.元素赋值,浅copy,深copy的关系

    赋值:对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。(a = b)

    浅copy:最外层列表内存地址已经发生变化,单独开辟了内存空间,内存的嵌套的列表还是公用一个.(同样适用于字典,集合,元组不可用)

    即,对于第二层或者更深层来说是不变的.(li.copy())

    深copy:对于深copy来说操作后这是两个完全独立,改变任意一层都不会对另外一个产生影响.(

    import copy

    copy.deepcopy)

    判断是赋值还是浅copy的方法:

    li = [1,'2','abd',['e',123,'34a']]

    l1 = li[:]

    l1.append(666 )

    print(l1)

    问l1是否增加元素

    确定方法:

    1.只要l1 = li(有任何对原数据进行操作的过程都是相当于重新新建了一个列表,比如切片,步长都是如此)

    2.如果是赋值的话,应该是两边都是定义的一个变量名称.不涉及到对原数据进行操作.

    ========================================================================================

    2.浅copy的操作

    例:三种类型的浅copy实验:

    例2:深copy实验,进行验证

     

    编码的补充(python3最后一部分)

    回顾一下,str与bytes之间的相互转化:

    英文:

     汉字:

     

     如果想把str 的(gbk)编码转换成(utf-8)编码如何操作

    结论:如果需要转换,需要先转换到Unicode,再分别进行转换即可.

     

     

     

  • 相关阅读:
    35 个手机和Web应用开发图标集
    20个创意404错误页面设计的启示
    31个不同种类的网站免费滑块巨大集合(PSD文件)
    18个伟大的搜索引擎设计者能够找到高品质的免费图标
    50 个独家免费图标集下载
    C语言对结构体何时用> , 何时用.
    GNU make manual 翻译(一)
    PostgreSQL 的 语法分析调用关系
    GNU make manual 翻译(二)
    PostgreSQL 的 target_list分析(七)
  • 原文地址:https://www.cnblogs.com/tom2ling/p/8653732.html
Copyright © 2011-2022 走看看