python数据结构

1. 列表(list)

1.1 列表的简介

数组是python中常见的数据结构之一,列表中的每一个元素都被分配一个数字作为索引,用来表示该元素在列表中的位置。从0开始,第一个是0,第二个是1,以此类推

python中的列表是一个有序的,可重复的元素集合,嵌套、迭代、修改、分片、追加、删除,成员判断。

从数据结构的角度来看,python的列表是一个可变长的顺序存储结构,每个位置存储的都是对象的指针

1.2 列表的创建

list()函数或[]将元素包围,元素之间用逗号分隔

>>> a = [1, 2, {3, 4, 5}, [6, 7]]
>>> print(type(a))
<class 'list'>
>>> b = list((2, 4, 6, 8, 10))
>>> print(type(b))
<class 'list'>

1.3 列表的访问

访问列表中的元素通过下标索引的形式进行访问。以方括号加下标值来访问元素。但在访问时要注意,下标值的大小不能大于列表长度-1,列表下标是从0开始到列表长度-1的。一旦下标越界,代码就会抛出异常。获取列表长度的方法:len(列表变量名)

>>> a = [1,2,3,4,5,6]
>>> a[1]
2
>>> a[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> len(a)
6

# 在使用下标访问列表元素的时候 负数下标相当于从后往前数,从-1开始
>>> a[-1]
6

1.4 修改元素值

直接对元素进行重新赋值

>>> a[1]
2
>>> a[1] = 'a'
>>> a[1]
'a'

1.5 删除元素

删除元素的方法有三个:delremove()pop()

  • del python中的删除关键字,可以用来删除变量

  • list.remove(obj):移除列表中某个值的第一个匹配项,但如果被移除的元素不存在,会报错

  • list.pop(): 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

    >>> a
    [1, 'a', 3, 4, 5, 6]
    >>> del a[0]
    >>> a
    ['a', 3, 4, 5, 6]
    >>> a.remove('c')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: list.remove(x): x not in list
    >>> a.remove(3)
    >>> a
    ['a', 4, 5, 6]
    >>> a.pop()
    6
    >>> a
    ['a', 4, 5]
    

1.6 列表的遍历

>>> a = [1,2,3]
>>> for i in a:
...     print(i)
... 
1
2
3
>>> for i in range(len(a)):
...     print(a[i])
... 
1
2
3

1.7 列表的切片

>>> a = [1,2,3,4,5,6]
>>> a[1:5]
[2, 3, 4, 5]

使用[start_index : end_index]来实现列表的切片,是一个左闭右开的区间范围

2. 元组(Tuple)

元组,也是一种序列结构,又名定值表,用于存储值固定不变的值表。

2.1 元组的创建

列表使用[]创建,元组的创建使用()

创建元组注意点:

  • 元组允许空创建

    >>> a = ()
    >>> type(a)
    <class 'tuple'>
    
  • 创建元组时如果只有一个数据时,要在数据后面加,不然创建的就不是一个元组对象

    >>> b = ('123')
    >>> type(b)
    <class 'str'>
    >>> c = (123)
    >>> type(c)
    <class 'int'>
    >>> d = (123,)
    >>> type(d)
    <class 'tuple'>
    

2.2 元组的操作

元组除了内部元素不可更改外,其他方面和列表大致相同

  • 元组与列表相同的操作

    • 使用方括号加下标访问元素

    • 切片(形成新元组对象)

    • count()/index()

    • len()/max()/min()/tuple()

  • 元组中不允许的操作,确切的说是元组没有的功能

    • 修改、新增元素

    • 删除某个元素(但可以删除整个元组)

    • 所有会对元组内部元素发生修改动作的方法。例如,元组没有remove,append,pop等方法。

注:元组只保证一级子元素不可变,不保证嵌套的内部元素不可变

>>> a = (1,'a',['A','D'])
>>> a
(1, 'a', ['A', 'D'])
>>> a[1]
'a'
>>> a[1] = 'A'		# 元组保证一级子元素不变
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[2]
['A', 'D']
>>> a[2] = 'A'		# 元组保证一级子元素不变
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[2][1] = 'C'
>>> a[2]
['A', 'C']

3. 字典(dict)

字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值去计算value的地址,具有非常快的查询和写入速度

注:在python3.6开始,字典是有序的!它将保持数据插入时的顺序,但是,字典元素在内存中是不连续的,也没有链接关系

字典可描述为一个不定长、可变、散列的集合类型。

3.1 字典的创建

创建字典使用{}或者dict()函数,创建时每个键值对用 : 分隔,两个键值对之间用 , 分隔,整个字典包含在{}

>>> dic = {1:"java",2:"python"}
>>> type(dic)
<class 'dict'>
>>> dic
{1: 'java', 2: 'python'}

注:在创建字典时值可以说任意的数据类型,但键必须是不可变的对象,例如整数、字符串bytes和元组

>>> dict([(1,"python"),(2,"java")])		# dict()创建字典
{1: 'python', 2: 'java'}
>>> dict([([1],"python"),(2,"java")])	# 列表不能作为键
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> dict([((1,),"python"),(2,"java")])	# 元组可以作为键
{(1,): 'python', 2: 'java'}

3.2 字典的访问

虽然字典在访问时是有序的,但是其仍然是一个集合,并不具备下标访问的功能,当然也没有切片的说法。不过字典可以通过把放入方括号的形式来取值

>>> dic = {"name":"python","age":31}
>>> dic['name']
'python'

如果值不存在,就会报错:

>>> dic['names']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'names'

3.3 增加和修改

向字典中添加元素和修改字典中的元素的方法就是一样的变量名[key] = value

>>> dic['author'] = '龟叔'
>>> dic
{'name': 'python', 'age': 31, 'author': '龟叔'}
>>> dic['author'] = 'Guido van Rossum'
>>> dic
{'name': 'python', 'age': 31, 'author': 'Guido van Rossum'}

3.4 字典的删除

  • 字典元素的删除

    >>> dic
    {'name': 'python', 'age': 31, 'author': 'Guido van Rossum'}
    >>> del dic['name']
    >>> dic
    {'age': 31, 'author': 'Guido van Rossum'}
    
    
  • 清空字典

    >>> dic.pop(age)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'age' is not defined
    >>> dic.pop('age')
    31
    >>> dic.clear()
    >>> dic
    {}
    
    
  • 删除字典

    >>> del dic
    >>> dic
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'dic' is not defined
    

4. 字节串(bytes)

bytes是Python3中新出现的数据类型,bytes类型也是用来表达一个字符串的,不过他是以字节为单位处理字符串,字符串是以字符为单位处理字符串

字节串(bytes)和字符串(string)的对比:

  • 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。
  • 字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。
  • 字节串和字符串都是不可变序列,不能随意增加和删除数据。

4.1 字节串的创建

字节串的创建方法有两种:b' 'bytes(字符串, encoding='编码类型')

>>> b = b'bytes'
>>> b
b'bytes'
>>> type(b)
<class 'bytes'>
>>> c = bytes('bytes')		# 一定要指定编码
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding
>>> c = bytes('bytes', encoding='utf8')
>>> type(c)
<class 'bytes'>

4.2 字节串和字符串的转换

str.encode('编码类型'):利用字符串的encode方法编码成bytes,默认为utf-8类型

bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。

>>> str = '人生苦短,我用python'
>>> str.encode()
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python'
>>> str
'人生苦短,我用python'
>>> b = str.encode()
>>> b
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python'
>>> b.decode()
'人生苦短,我用python'

5. 集合(set)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的小猫猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值