zoukankan      html  css  js  c++  java
  • 关于python数据类型的一些举例

    if True:
        name2=1
    print(name2)
    

      输出:1

      

    if False:
        name1=1
    print(name1)
    

      报错:

    NameError: name 'name1' is not defined
    

      总结:只要代码执行,放在内存中,后面代码就可以使用。这一点与其它语言不一样。 在python中,一个作用域的范围是指函数的范围。

      

    l=[1,2,3]
    print(l[3])
    

      输出:

    IndexError: list index out of range
    

      

      

    l=[1,2,3]
    print(l[3:80])
    

      输出:

    []
    

      总结:列表取索引的之前,索引值不能超过列表索引的最大值。当列表取切片的时候,则不受这个限制,即切边范围随便取。

      join方法

    l=['a','b','c']
    tag=True
    ll=''
    for i in l:
        if tag:           #注意的一点是,当循环一个可迭代对象时,
            i=i           #如果有一个是特殊的,而其它是一样的,可以利用tag标志位。tag标志位一般在if条件判断中,进入这个if子语句,执行完代码,重新给tag赋值。
            tag=False     #不管怎么样,感觉好屌的样子,而且效果也很好。
        else:             #要经常采用。虽然 .join() 方法也能实现。
            i='_'+i
        ll+=i
    print(ll)
    
    print('_'.join(l))
    

      输出:

    a_b_c
    a_b_c
    

      

      

      l= [0,1,2,3,4,5,6,7,8,9,10,11],删除列表中索引值为偶数。

    l=[0,1,2,3,4,5,6,7,8,9,10,11]
    for i in range(len(l)):
        if i %2==0:
            del l[i]
    print(l)
    

      结果是报错:

    IndexError: list assignment index out of range
    

      因为 for i in range(len(l)),实际上是走了第一遍,遇到len(l)值后就确定了,直到for循环遍历到最大值。

      随着删除一些元素,会影响到列表长度,从而使得索引取值时,容易出现错误。

      方法一:

        复制列表l,保存为列表ll。进行操作,比较low。

      方法二:

        逆向思维。从后往前取索引,删除元素。删掉的索引值越来越小,而且前面可能要删掉的元素的索引值永远是在列表的合法长度以内。666 

    l=[0,1,2,3,4,5,6,7,8,9,10,11]
    for i in range(len(l)-1,-1,-1):
        if i %2==0:
            del l[i]
    print(l)
    

      输出:

    [1, 3, 5, 7, 9, 11]
    

      方法三:

        直接用列表切片步长,简直6翻了,切片很强大,步长也同样厉害。 ---del l [ ],作为单独一个语句,而不是列表 l 的方法

    l=[0,1,2,3,4,5,6,7,8,9,10,11]
    del l[::2]
    print(l)
    

      输出:

    [1, 3, 5, 7, 9, 11]
    

        

      

      

      dic=dict(k1=1,k2=2,k3=3,k4=4,m5=5,m6=6,m7=7),删除字典dic中含有k的键值对。
      如果按照以下的方式写:
    dic=dict(k1=1,k2=2,k3=3,k4=4,m5=5,m6=6,m7=7)
    for i in dic:
        if 'k' in i:
            del dic[i]
    print(dic)
    

      结果报错:

    RuntimeError: dictionary changed size during iteration
    

      所以,不要在循环字典的过程中,修改字典的大小。

      如果是修改字典的value值,这是允许的。例如:

    dic=dict(k1=1,k2=2,k3=3,k4=4,m5=5,m6=6,m7=7)
    for i in dic:
        if 'k' in i:
            dic[i]=666
    print(dic)
    

      输出:

    {'k1': 666, 'k2': 666, 'k3': 666, 'k4': 666, 'm5': 5, 'm6': 6, 'm7': 7}
    

      

      如果想修改字典的大小,只有退而求其次,建立一个空列表,保存需要更好的key值,然后循环这个列表,进行修改value值。这个列表起到了一个中间人的作用。

    dic=dict(k1=1,k2=2,k3=3,k4=4,m5=5,m6=6,m7=7)
    l=[]
    for i in dic:
        if 'k' in i:
            l.append(i)
    for i in l:
        del dic[i]
    print(dic)
    

      输出:

    {'m5': 5, 'm6': 6, 'm7': 7}
    

      

      补充,可以直接这样做。

    dic=dict(k1=1,k2=2,k3=3,k4=4,m5=5,m6=6,m7=7)
    
    for i in list(dic):                             #这里本质上是for循环一个列表哦,与for i in dic,有着本质的区别。后面的实际上还是在迭代字典。这其实是上面方法的简化。
        if 'k' in i:
            del dic[i]
    print(dic)
    

      

      综上列表和字典的两个例子,如果列表和字典涉及到删除,一定要慎重!

      

      如果想要实现这样一个功能。敏感词以字符串的格式存储在列表中,用户输入一段话,如果没有敏感词,直接输出,如果含有任意一个敏感词,让用户重新输入,直到输入合法为止。

      自我分析:刚开始还是有些懵逼的,看了老师讲的代码,也没理清老师的思路,直到自己用笔写在本子上,一点一点分析。试将思路整理如下:

      整体肯定是一个循环,虽然输入正确直接打印,相当于while循环走一遍,但这是可以用break实现的,重要的是如果有敏感词要让用户循环输入。、

      判定是否有敏感词本身这段代码时非常简单的。

      在循环体内,如果输入合法,直接break跳出循环,这里要有一个if 判断。如果输入不合法。这段代码不会执行,从而也不会break跳出循环体,实现了一直让用户输入的功能。

      上一条的if的条件怎么设定就是重中之重的,非常关键。无外乎两种情况,输入合法与不合法,这是就会考虑到tag标志位。初始化一个值,如果用户输入内容不合法,加一行代码,改变标志位。 如果用户输入合法,标志位不会发生改变。if判断,就可以实现上面的功能了。

      为什么要考虑到标志位,因为如果用户输入正确,直接打印用户输入的东西,而不循环。这段代码必须是在循环的第一等级中。但是由于如果用户输入错误,输入正确才执行的代码则不能执行,所以必须加一个条件判断,涉及到两种情况,所以要用到tag标志位。

    l=['苍老师','小泽玛利亚','樱井莉亚']
    while True:
        tag=True
        msg=input('==>')
        for i in l:
            if i in msg:
                tag=False
                break
        if tag:
            print(msg)
            break
    

      

      

    17.8.24补充:
    int,str,bool,list,tuple,dict,set
      元素可以增加删除
        可变类型:list,dict,set
        不可变类型:int,str,bool,tuple

       可变类型,如果变量值相同,但是变量名的id是不一样的,这是毫无疑问的。

       不可变类型里,如果变量值形同,变量名的id是一致的,但是有一个例外,就是tuple。上代码。

    a=tuple([1,2])
    b=tuple([1,2])
    print(a,id(a),type(a))
    print(b,id(b),type(b))
    

      输出:

    (1, 2) 2417742172872 <class 'tuple'>
    (1, 2) 2417742172808 <class 'tuple'>
    

      得出结论:元组还是比较特殊的,相比其他不可变类型,如果变量值相等,python还是会在内存中开辟两块独立的空间。这与int,str,bool是不同的。

       

      

  • 相关阅读:
    宏开发:excel中添加拼接行
    windows消息简单应用实例
    C#用到windows 消息列表Message类MSG的id代号
    在C#中winform程序中应用nlog日志工具
    sql语句中生成0-10随机数
    div+css布局使用inline-block
    linux在nginx中服务器集群用到session的注意事项
    linux 安装php时不安装mysql客户端或者服务端
    centos 配置apache注意事项
    Apache服务器不能启动查看启动错误信息
  • 原文地址:https://www.cnblogs.com/654321cc/p/7406915.html
Copyright © 2011-2022 走看看