“数组”类型(python中都可[]的一些数据类型)

“数组”类型(python中都可[]的一些数据类型)

  • list

    特点是可变的、能动态扩容,可存储Python中的一切对象,使用时不用指定存储的元素的类型。

    >>> arr = ["one","two","three"]
    >>> arr[0]
    'one'
    # 动态扩容
    >>> arr.append(4)
    >>> arr
    ['one', 'two', 'three', 4]
    # 删除一个元素
    >>> del arr[2]
    >>> arr
    ['one', 'two', 4]
    
  • tuple

    tuple的操作与list类似。特点是不可变,不能扩容,可存储Python中的一切对象,使用时不用指定存储的元素的类型。

    >>> t = 'one','two',3
    >>> t
    ('one', 'two', 3)
    >>> t.append(4)
    AttributeError: 'tuple' object has no attribute 'append'
    >>> del t[0]
    TypeError: 'tuple' object doesn't support item deletion
    
    #tuple可以使用+运算符,这个运算将创建一个新的tuple对象用于存储数据。就是说t和t+(1,)是两个东西
    #另外加的那个(1,)格式非常重要。
    >>>t = 'one','two',3
    >>>print(t)
    ('one', 'two', 3)
    >>>print(t+(1,))
    ('one', 'two', 3, 1)
    
  • list和tuple都可存储Python中的一切对象,使用时不用指定存储的元素的类型。

  • array.array

    特点是可变的、存储相同类型的数值,不能存储对象。

    因为array在使用的时候要指定元素数据类型,因此它比list和tuple都有比较高效空间性能。

    # 使用时指定元素数据类型为`float`
    >>> arr = array.array('f', (1.0, 1.5, 2.0, 2.5))
    >>> arr
    array('f', [1.0, 1.5, 2.0, 2.5])
    # 修改一个元素
    >>> arr[1]=12.45
    >>> arr
    array('f', [1.0, 12.449999809265137, 2.0, 2.5])
    # 删除一个元素
    >>> del arr[2]
    >>> arr
    array('f', [1.0, 12.449999809265137, 2.5])
    # 增加一个元素
    >>> arr.append(4.89)
    >>> arr
    array('f', [1.0, 12.449999809265137, 2.5, 4.889999866485596])
    # 如果将一个字符串类型数据存储到一个浮点数的数组将会报错
    >>> arr[0]='hello'
    TypeError: must be real number, not str
    

    https://img-blog.csdnimg.cn/20201103162420277.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FkUHl0aG9u,size_16,color_FFFFFF,t_70#pic_center

  • str

    字符串序列str,为什么str字符串会被放在这里,原因就是字符串和数组一样也可以像X[n]一样运用,另外也可以对字符串使用list转换成数组,另外也可以对字符串(就像是对数组一样)进行遍历。

    特点是不可变的Unicode字符序列,也就是说字符串是不可变的。

    >>> s ='123abc'
    >>> s
    '123abc'
    >>> s[0]
    '1'
    >>> s[2]
    '3'
    # 字符串是不可变的序列,不能删除其中的元素
    >>> del s[1]
    TypeError: 'str' object doesn't support item deletion  
    
    # 要对字符串进行操作,可以转化成list  
    >>> sn = list(s)
    >>> sn
    ['1', '2', '3', 'a', 'b', 'c']
    >>> sn.append(9)
    >>> sn
    ['1', '2', '3', 'a', 'b', 'c', 9]
    
    #也可以对字符串(就像是对数组一样)进行遍历。
    >>>a= "abc123"
    >>>for i in a:
    >>>    print(i)
    a
    b
    c
    1
    2
    3
    
    # 字符串中的元素也是字符串对象
    >>> type(s[2])
    <class 'str'>
    >>> type(s)
    <class 'str'>
    
    #str对象也可以执行+操作,它也会生成一个新对象用于存储。
    >>> s2 = s+'33'
    >>> s2
    '123abc33'
    >>> id(s2)
    4605193648
    >>> id(s)
    4552640416
    
  • bytes

    bytes对象用于存储字节序列,它的特点是不可变存储,可存储0-256的数值。

    #如果直接是单独的一个bytes(n)的话,会是n个\x00
    >>> bytes(2)
    b'\x00\x00'
    >>> b = bytes([0,2,4,8])
    >>> b[2]
    4
    >>> b
    b'\x00\x02\x04\x08'
    >>> b[0]=33
    TypeError: 'bytes' object does not support item assignment
    >>> del b[0]
    TypeError: 'bytes' object doesn't support item deletion
    
    #这里bytes比较特殊,就是说,如果直接是加单独的一个bytes(n)的话,会是n个\x00
    >>> print(b+bytes(2))
    b'\x00\x02\x04\x08\x00\x00'
    
    #但是如果是+一个数组的话,就是正常的了
    >>> print(b+bytes([1,3]))
    b'\x00\x02\x04\x08\x01\x03'
    
  • bytearray

    bytearray对象与bytes类似,用于存储字节序列。它的特点是可变的,能动态扩容的字节数组。

    >>> ba = bytearray((1,3,5,7,9))
    >>> ba
    bytearray(b'\x01\x03\x05\x07\t')
    >>> ba[1]
    3
    
    # 删除一个元素
    >>> del ba[1]
    >>> ba
    bytearray(b'\x01\x05\x07\t')
    >>> ba[0]=2
    >>> ba[0]
    2
    
    # 添加一个元素
    >>> ba.append(6)
    
    # 只能添加字节
    >>> ba.append(s)
    TypeError: 'str' object cannot be interpreted as an integer
    >>> ba
    bytearray(b'\x02\x05\x07\t\x06')
    
    # 字节的范围是0-256
    >>> ba[2]=288
    ValueError: byte must be in range(0, 256)
    
    # bytearray转成bytes将生成一个新对象
    >>> bn = bytes(ba)
    >>> id(bn)
    4604114344
    >>> id(ba)
    4552473544
    
  • 总结和区分(思维导图)

    https://gitmind.cn/app/docs/mguk9ndh

  • 之间的转化

    可以转化成list的有:tuple,str。直接加上list()就好

    str和bytes字符串和字节之间的转换:

    str变bytes:bytes(s,encoding='utf-8')或s.encode()

    bytes变str:str(b,encoding='utf-8')或b.decode()

posted on 2023-12-07 20:28  aster_ist  阅读(36)  评论(0编辑  收藏  举报

导航