zoukankan      html  css  js  c++  java
  • Python常见数据类型及操作

    基础数据类型

    什么是数据类型?

    我们人类可以很容易的分清数字与字符的区别,但计算机并不能,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的。

    因此,在每个编程语言里都会有一个叫数据类型的东西,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。 

    字符串

    str(字符串) ‘1’ ” I',m a teacher “

    python中,凡是用引号(单引、双引),引起来的内容都是字符串。

    字符串常用操作:

    s = 'I am from china'
    
    #首字母大写
    print(s.capitalize())
    I am from china
    
    #全大写
    print(s.upper())
    I AM FROM CHINA
    
    #全小写
    print(s.lower())
    i am from china
    
    #大小写反转
    print(s.swapcase())
    i AM FROM CHINA
    
    #所有首字母大写
    print(s.title())
    I Am From China
    
    #计算字符串长度
    print(len(s))
    15
    
    #内容居中,两边填充(共50个字符串,多余的用~填充,默认填充符是空格)
    print(s.center(50,'~'))
    ~~~~~~~~~~~~~~~~~I am from china~~~~~~~~~~~~~~~~~~
    
    #判断字符串以什么开始
    print(s.startswith('I'))
    True
    
    #判断字符串以什么结尾
    print(s.endswith('I'))
    False
    
    #查询字符串是否含有某元素,找到返回元素对应下标,找不到返回-1
    print(s.find('a'))
    2 

    比较重要的几个方法:

    s='  Chi nese '
    
    #删除前后空格
    print(s.strip())
    Chi nese
    #删除后面的空格
    print(s.rstrip())
      Chi nese
    #删除前面的空格
    print(s.lstrip())
    Chi nese 
    #统计元素个数
    print(s.count('e'))
    2
    #将字符串以元素中内容分割为列表
    print(s.split())
    ['Chi', 'nese']
    print(s.split('e'))
    ['  Chi n', 's', ' ']
    

    切片:

    切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾尾)
    a = 'ABCDEFGHIJK'
    print(a[0:3])
    ABC
    print(a[2:5])
    CDE
    #默认到最后
    print(a[0:])
    ABCDEFGHIJK
    # -1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到K元素
    print(a[0:-1])
    ABCDEFGHIJ
    #加步长
    print(a[0:5:2]) 
    ACE
    #反向加步长
    print(a[5:0:-2]) 
    FDB  

    索引:

    索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推
    a = 'ABCDEFGHIJK'
    print(a[0])
    print(a[3])
    print(a[5])
    print(a[7])
    
    #输出
    A
    D
    F
    H

    补充:
    字符串计算

    #相加,即拼接 : +
    a = 'hello '
    b = 'world'
    print(a+b)
    #输出
    hello world
    
    #与数字相乘: * 
    print('hello '*4)
    #输出
    hello hello hello hell
    

    字符串替换

    #将重新替换为你,如果后面不跟次数,默认替换所有
    s = '重新打开一个终端窗口,重新打开一个终端窗口'
    s1 =s.replace('重新','你',1)
    print(s1)
    你打开一个终端窗口,重新打开一个终端窗口

    字符串判断

    print("hahaha".isalpha())       #判断是不是字母
    print("hahaha123".isalnum())    #判断是不是阿拉伯数字
    print(u"23".isdecimal())        #判断是否只包含十进制字符,定义十进制在字符串前加'u'即可
    print("2".isdigit())            #判断是否整数
    print("al_ex".isidentifier())   #判断是否合法的变量名
    print("alex".islower())         #判断是否全为小写
    print("Alex".isupper())         #判断是否全为大写

    字符串循环

    name='Love1'
    for i in name:
        print(i)
    
    #输出
    L
    o
    v
    e
    1

     整型

    int(整型) 18,23 常用于计算。

    在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

    在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

    long(长整型)

    理论上Python没有限制长整数大小,实际由于机器内存有限,数值不会无限大

    注意:在Python3里不再有long类型了,全都是int

    float(浮点型)

    扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
    浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

    complex(复数) 
    复数是由实数部分和虚数部分组成,一般是x+yj形式,其中x为复数的实数部分,y为复数的虚数部分

    用来测磁场、量子力学之类的,很少用到。

    数字在pycharm 中的表现形式: 
    加引号的数字是 字符串;不加引号的数字是 “数字”,红色的

    布尔值

    bool(布尔值)

    只有真或假两种状态,性别、命题真假,常用于判断。

    真   1   True

    假   0   False

    列表

    列表是python中的基础数据类型之一,它是以[ ]括起来,每个元素以逗号隔开,而且可以存放各种数据类型。

    列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。列表是有序的,有索引值,可切片,方便取值。

    列表常用方法:

    索引、切片同字符串。

    增加

    li = [1,'a','b',2,3,'a']
    
    #按照索引去增加
    li.insert(0,55)
    print(li)
    [55, 1, 'a', 'b', 2, 3, 'a']
    #默认增加到最后一个元素
    li.append('aaa')
    print(li)
    [1, 'a', 'b', 2, 3, 'a', 'aaa']
    #增加一个列表到最后一个元素
    li.append([1,2,3])
    print(li)
    [1, 'a', 'b', 2, 3, 'a', [1, 2, 3]]
    #迭代增,会将内容分解到最小元素
    li.extend('abc')
    print(li)
    [1, 'a', 'b', 2, 3, 'a', 'a', 'b', 'c']
    

     删除

    li = [1,'a','b',2,3,'a']
    
    #按索引删除
    li.pop(0)
    print(li)
    ['a', 'b', 2, 3, 'a']
    #默认删除最后一个
    li.pop()
    print(li)
    [1, 'a', 'b', 2, 3]
    #按元素删除
    li.remove('a')
    print(li)
    [1, 'b', 2, 3, 'a']
    #清空列表
    li.clear()
    print(li)
    []
    #直接删除列表
    del li
    print(li)
    NameError: name 'li' is not defined
    #切片去删除
    del li[0:2]
    print(li)
    ['b', 2, 3, 'a']
    

     修改

    li = [1,'a','b',2,3,'a']
    
    #按索引修改
    li[0] = '8'
    print(li)
    ['8', 'a', 'b', 2, 3, 'a']
    
    #切片修改,按迭代处理,内容会分解到最小元素都加进去
    li[0:2]='hello'
    print(li)
    ['h', 'e', 'l', 'l', 'o', 'b', 2, 3, 'a']
    

     查询

    li = [1,'a','b',2,3,'a']
    #遍历查询
    for i in li:
        print(i)
    1
    a
    b
    2
    3
    a
    
    #测量长度
    l=len(li)
    print(l)
    6
    
    #统计次数
    print(li.count('a'))
    2
    
    #查索引
    print(li.index('b'))
    2
    

     排序

    li = [1, 5, 7, 2, 3, 4]
    
    #正排序
    li.sort()
    print(li)
    [1, 2, 3, 4, 5, 7]
    
    #倒排序
    li.sort(reverse=True)
    print(li)
    [7, 5, 4, 3, 2, 1]
    
    #反转
    li.reverse()
    print(li)
    [4, 3, 2, 7, 5, 1]

    元组

    数据只读,也叫做只读列表。

    元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)("a","b","c")

    字典 

    字典一种key - value 的数据类型,使用就像我们小时候用的字典,通过部首、拼音来查对应页的详细内容。 
    字典的特性: 字典是无序的; key必须是唯一的,so天生去重。 
    字典里面的key是唯一的,所以不用索引表 
    如何实现唯一?

    hash 中文名:散列 通过一定的数学算法,使字符串能变成唯一的数字序列

     增删改查

    names = {
        "stu1101" :{"name":"Alex","age":22,"hobbie":"girl"},
        "stu1102" : "Jack",
        "stu1103" : "rain",
    }
    print(names)
    #查询
    print(names["stu1101"])
    print(names["stu1101"]["hobbie"])
    #判断key-"stu1104"是否存在,如果存在返回值,如果否返回none;也可以自定义返回内容,此处为no
    print(names.get("stu1104","no"))
    #增加
    names["stu1104"] = ["Rose",23,"DBA"]
    print(names["stu1104"])
    #修改
    names["stu1104"][0] = "Violet"
    print(names["stu1104"])
    #删除
    print(names.pop("stu1105","不存在"))
    del names["stu1103"]
    print(names)
    
    #输出
    {'stu1103': 'rain', 'stu1102': 'Jack', 'stu1101': {'age': 22, 'name': 'Alex', 'hobbie': 'girl'}}
    {'age': 22, 'name': 'Alex', 'hobbie': 'girl'}
    girl
    no
    ['Rose', 23, 'DBA']
    ['Violet', 23, 'DBA']
    不存在
    {'stu1104': ['Violet', 23, 'DBA'], 'stu1102': 'Jack', 'stu1101': {'age': 22, 'name': 'Alex', 'hobbie': 'girl'}}

    循环

    names = {
        "stu1101":{"name":"Alex","age":22,"hobbie":"girl"},
        "stu1102": "Jack",
        "stu1103": "rain",
        "stu1104":{"Rose",23,"DBA"}
    }
    #字典循环常用的两种方式:打印出key和value
    # @1 尽量用这种,效率高
    for key in names:
        print(key,names[key])
    # @2 先将字典转为列表,再进行循环,效率低
    print(names.items())
    for k,v in names.items():
        print(k,v)
    print(names.keys())         #打印所有key
    print(names.values())       #打印所有value
    #先获取这个值,如果存在就打印,不存在就创建
    print(names.setdefault("stu1106","Mary"))
    print(names)
    #字典合并 相当于修改1102的值,因为字典中的key是唯一的
    name1 = {"stu1102":"Java",1:333,2:444}
    names.update(name1)
    print(names)
    #输出
    stu1103 rain
    stu1101 {'name': 'Alex', 'age': 22, 'hobbie': 'girl'}
    stu1102 Jack
    stu1104 {'Rose', 'DBA', 23}
    dict_keys(['stu1103', 'stu1101', 'stu1104', 'stu1102'])
    dict_values(['rain', {'name': 'Alex', 'hobbie': 'girl', 'age': 22}, {'DBA', 'Rose', 23}, 'Jack'])
    Mary
    {'stu1103': 'rain', 'stu1101': {'hobbie': 'girl', 'age': 22, 'name': 'Alex'}, 'stu1106': 'Mary', 'stu1104': {'Rose', 'DBA', 23}, 'stu1102': 'Jack'}
    {1: 333, 'stu1106': 'Mary', 2: 444, 'stu1104': {'Rose', 'DBA', 23}, 'stu1103': 'rain', 'stu1102': 'Java', 'stu1101': {'hobbie': 'girl', 'age': 22, 'name': 'Alex'}}

    字典中的深浅copy

    names = {
        "stu1101":{"name":"Alex","age":22},
        "stu1102": "Jack",
        "stu1103": "rain",
        "stu1104":{"Rose",23,"DBA"}
    }
    name1 = names.copy()
    #第一层的数据不会变,其他的都会变。应用场景:银行共享账户:主卡、副卡
    names["stu1103"] = "RAIN"       #此处相当于开辟了一块新的内存地址,所以names中的rain会改变
    names["stu1101"]["age"] = 24    #此处只是修改了列表中的数据,而列表的内存地址没有改变,所以打印出的names和name1内容会相同
    print(names)
    print(name1)
    #深copy, 完全copy
    import copy
    name2 = copy.deepcopy(names)
    print(name2)
    #输出
    {'stu1103': 'RAIN', 'stu1102': 'Jack', 'stu1101': {'age': 24, 'name': 'Alex'}, 'stu1104': {'DBA', 'Rose', 23}}
    {'stu1101': {'age': 24, 'name': 'Alex'}, 'stu1102': 'Jack', 'stu1103': 'rain', 'stu1104': {'DBA', 'Rose', 23}}
    {'stu1101': {'age': 24, 'name': 'Alex'}, 'stu1102': 'Jack', 'stu1103': 'RAIN', 'stu1104': {'DBA', 'Rose', 23}}
  • 相关阅读:
    关于http头
    关于js中的命名
    PHP之APC缓存详细介绍
    找回Windows Vista桌面的IE7.0图标
    查看操作系统是不是中文正式版?
    如何判断XP是否已激活
    Vista取消默认共享
    今天是儿童节,祝福儿子节日快乐!
    天天锻炼身体好!
    如何查看你的XP SP2是否原版?
  • 原文地址:https://www.cnblogs.com/zhaomeng/p/10989442.html
Copyright © 2011-2022 走看看