zoukankan      html  css  js  c++  java
  • python学习笔记day07 小结

    字符和字节的区别:

    字符就是看到的组成对象的最小元素,比如‘中国’ 中 就是一个字符,国 也是一个字符;

    字节是一个单位,八位表示一个字节;

    想查看某些方法源码:

    比如想查看str的全部方法:

    ctrl + B(或者ctrl + 鼠标左键) 可以查看对应的方法,不过如果方法很多,确实不太方便,可以按下面方式操作:

      ----->    -----> ------->勾上即可查看具体方法列表,双击可查看方法详细介绍;

    字符串--不可变数据类型;列表:可变数据类型

    之前一道题,判断一字符串连续数字的个数:

    s='hskd123jk34d'
    for i in s:
        print(i)
        if not i.isdigit():
            s=s.replace(i,' ')
    
        print(s.split(),len(s.split()))

    运行会发现,print(i) 其实还是原来字符串s的每一个字符,虽然内部当原有字符串中的字符不是数字时已经用空格代替,并且循环赋给s了(注意这里的s其实已经是新的s了,虽然名字相同,因为字符串是不可变数据类型,不会改变原有的字符串,对字符串的任何操作都是产生新的字符串!!!)

    运行结果:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    h
    s
    k
    d
    1
    2
    3
    j
    k
    3
    4
    d
    ['123', '34'] 2

    每次print(i) 并不是逐渐被替换成的空格哦~

    然后我们再来看可变数据类型list:

    如果我们想要完成一个需求,循环删除list的元素:(下面这个写法是错误的~)

    L=[1,2,3,4,5]
    for i in range(len(L)):
        print(i,L)  # i还是原来的长度生成的
        del L[i]  #每次会删除一个元素,造成原有的L变化,长度就变了
    print(L)

    会报错:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    Traceback (most recent call last):
      File "F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py", line 49, in <module>
        del L[i]  #每次回删除一个元素,造成原有的L变化,长度就变了
    IndexError: list assignment index out of range
    0 [1, 2, 3, 4, 5]
    1 [2, 3, 4, 5]
    2 [2, 4, 5]
    3 [2, 4]

    当i=3是已经删除了三个元素了,L还剩2个元素,i=3 所以会出现上面"IndexError: list assignment index out of range”的错误

    str那样操作就可以,list会报错,根本原因是前者是不可变数据类型,对str的任何操作都是产生一个新的str并不会改变原有的str;

    而list是可变数据类型,在循环过程中操作是会改变原有的list的!!

    正确解法:

    L=[1,2,3,4,5]
    for i in range(len(L)):
        del L[-1]
        print(L)

    运行结果:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    [1, 2, 3, 4]
    [1, 2, 3]
    [1, 2]
    [1]

     如果是要删除奇数位置的数:

    L=[1,2,3,4,5]
    for i in range(len(L)):
        del L[i]
        L.append(0)
    print(L)

    运行结果:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    [2, 4, 0, 0, 0]

    代表奇数位置的 1 3 5 已经删掉~

    或者也可以:

    L=[1,2,3,4,5]
    del L[0::2]
    print(L)

    运行结果:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    [2, 4]

     字典:

    只要是在字典中循环,删除字典中的键值就会报错~

    比如,如果想要实现如下需求: 删除字典中带有k的键:

    dic={'k1':'v1','k2':'v2','a3':'v3'}
    for i in dic:
        if 'k' in i:
            del dic[i]
    print(dic)

    运行结果:会报错

    Traceback (most recent call last):
      File "F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py", line 58, in <module>
        for i in dic:
    RuntimeError: dictionary changed size during iteration

    只要是在list 或者dict中循环,然后删除list 或者dict中的元素都是会报错的,一定要谨慎!

    可以这样做:

    dic={'k1':'v1','k2':'v2','a3':'v3'}
    dic1={}
    for i in dic:
        if 'k' not in i:
            dic1.setdefault(i,dic[i])
    dic=dic1
    print(dic)

    就是可以循环字典,但是不删除,而是再建一个字典,把不带k的键放到新字典中,就相当于把带k的键过滤掉啦~

    或者可以新建一个list ,循环list 来删除字典中的某些键:

    dic={'k1':'v1','k2':'v2','a3':'v3'}
    L=[]
    for i in dic:
        if 'k' in i:
            L.append(i)  #把带有k的键放到list中
    for i in L:
        del dic[i]
    print(dic)

    运行结果:

    F:workspace_pythonpycharm_projectsvenvScriptspython.exe F:/workspace_python/pycharm_projects/fullstack2018-08-17/week2/day04/01.py
    {'a3': 'v3'}

    元组

    t=(1)
    print(t,type(t))    #int
    t2=(1,) 
    print(t2,type(t2))  #tuple
    t3=([1]) 
    print(t3,type(t3))  #list
    t4=([1],)
    print(t4,type(t4)) #tuple

    ()中只有一个元素,且没有逗号时,该是什么类型就是什么类型;一个元素得加逗号才是tuple类型~

    talk is cheap,show me the code
  • 相关阅读:
    BlockingQueue 原理 分析
    java引用 强引用,软引用,弱引用
    actomic cas无锁操作。
    MongoDB库设计原则及实践
    spring事物传播机制 事物隔离级别
    Hive UDAF介绍与开发
    [技术学习]js接口继承
    [技术学习]js继承
    [技术学习]正则表达式分析
    [技术学习]js正则表达式汇总
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9522903.html
Copyright © 2011-2022 走看看