展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > python中常用的经典数据结构有哪些

python中常用的经典数据结构有哪些

NumPy包中的数据结构NumPy中的数据结构,包括Ndarray、Matrix数组(Ndarray)创建Ndarray引入NumPy包,将其命名为np。在引入NumPy包后方可使用数组数据结构importnumpyasnp创建数组对象,在NumPy包中:array()方法可以把序列型对象转换成数组;arange()方法可以生成自定义终点的一堆数组;ones生成值全为1的数组;empty()方法会生成一个给定类型和维度且不进行数据初始化的数组;random()生成随机数组;linspace()生成指定起止

本文目录

    NumPy包中的数据结构

    NumPy中的数据结构,包括Ndarray、Matrix

    数组(Ndarray)

    创建Ndarray

    • 引入NumPy包,将其命名为np。在引入NumPy包后方可使用数组数据结构

    import numpy as np

    创建数组对象,在NumPy包中:

    1. array() 方法可以把序列型对象转换成数组;

    2. arange() 方法可以生成自定义终点的一堆数组;

    3. ones 生成值全为1的数组;

    4. empty() 方法会生成一个给定类型和维度且不进行数据初始化的数组;

    5. random() 生成随机数组;

    6. linspace() 生成指定起止数值和步长的一维数组,例如生成一个从1到10的元素个数为5的数组

    import numpy as np
    array001 = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
    a2 = np.arange(5)
    a3 = np.ones((2,2))
    a4 = np.empty((2,2))
    a5 = np.random.rand(4,2)
    a6 = np.linspace(10,30,5)
    print('\n序列型数据转化得到数组:',array001,
          '\n显示该数据结构类型:',type(array001),
          '\narange()函数创建的数组:',a2,
          '\nones()函数创建的全1数组:\n',a3,
          '\nempty()函数创建的未赋值的数组:\n',a4,
          '\nrandom()函数创建的随机数组:\n',a5,
          '\nlinespace()函数创建的随机数组:',a6)

    序列型数据转化得到数组: [ 1  2  3  4  5  6  7  8  9 10 11 12] 
    显示该数据结构类型:  
    arange()函数创建的数组: [0 1 2 3 4] 
    ones()函数创建的全1数组:
     [[1. 1.]
     [1. 1.]] 
    empty()函数创建的未赋值的数组:
     [[0. 0.]
     [0. 0.]] 
    random()函数创建的随机数组:
     [[0.39902074 0.63298526]
     [0.09231821 0.23007193]
     [0.09899536 0.83000881]
     [0.27760961 0.65135898]] 
    linespace()函数创建的随机数组: [10. 15. 20. 25. 30.]

    Ndarray查询操作

    数组可以通过 array[a:b] 从数组中提取子集,也可以在此基础上进行批量赋值操作。

    array002 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    print('\n一维数组索引:',array001[4:],
          '\n二维数组索引:',array002[1:3,2:4]) #2-3行、3-4列

    一维数组索引: [ 5  6  7  8  9 10 11 12] 
    二维数组索引: [[ 7  8] [11 12]]

    以下均为多维数组中的常用属性,其中,shape 可以返回对象的数据结构,例如行数与列数,除了返回一个表示数组各维度的元组,也可以通过 reshape 改变数组的结构

    array004 = array001.reshape(3,-1)
    print('\n改变结构后的数组\n',array004,
          '\n数组各个维度:',array004.shape,
          '\n数组结构类型:',array004.dtype,
          '\n数组数据个数:',array004.size,
          '\n数组数据类型字节数:',array004.itemsize,
          '\n数组维度:',array004.ndim)

    改变结构后的数组
     [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]] 
    数组各个维度: (3, 4) 
    数组结构类型: int32 
    数组数据个数: 12 
    数组数据类型字节数: 4 
    数组维度: 2

    Ndarray增加操作

    • append() 函数可以增加元素或者列表类型的数据,但必须注意维度需要保持一致。

    array003 = np.append(array002,[[1],[2],[3]],axis = 1) # axis = 1 按列方向添加
    print('\n增加一列后的数组\n',array003)

    增加一列后的数组
     [[ 1  2  3  4  1]
     [ 5  6  7  8  2]
     [ 9 10 11 12  3]]

    Ndarray 删除操作

    • 使用 delete(x,i,axis=) 方法可以删除数组对象中行或者列,第三个参数 axis 决定了删除的是行还是列,需要删除的对象可以是一个数,也可以是一个元组。

    array003 = array002.T
    print('删除单行后的数组:\n',np.delete(array003,1,axis=0)) # axis=0删除行
    array003 = array002.T
    print('批量删除后的数组:\n',np.delete(array003,(1,3),0))
    array003 = array002.T
    print('删除单列后的数组\n',np.delete(array003,1,1)) # axis=1删除列

    删除单行后的数组:
     [[ 1  5  9]
     [ 3  7 11]
     [ 4  8 12]]
    批量删除后的数组:
     [[ 1  5  9]
     [ 3  7 11]]
    删除单列后的数组
     [[ 1  9]
     [ 2 10]
     [ 3 11]
     [ 4 12]]

    Ndarray修改

    • 可以使用索引的方式进行数组数据的批量修改。

    array002[1:2]=0
    print('数组批量赋值\n',array002)
    array003 = array002.T
    array003[1][1] = 100
    print('修改数值后的数组\n',array003)

    数组批量赋值
     [[ 1  2  3  4]
     [ 0  0  0  0]
     [ 9 10 11 12]]
    修改数值后的数组
     [[  1   0   9]
     [  2 100  10]
     [  3   0  11]
     [  4   0  12]]

    Ndarray其它操作

    1.二维数组转置。array.T 可以得到数组对象转置后的结果

    2.数组的堆叠。首先新进两个数组,之后依次使用 vstack 进行纵向堆叠和使用 hstack 进行横向堆叠

    arr1 = np.array([1,2,3])
    arr2 = np.array([4,5,6])
    print('纵向堆叠后:\n',np.vstack((arr1,arr2)),
          '\n横向堆叠后:\n',np.hstack((arr1,arr2)))

    纵向堆叠后:
     [[1 2 3]
     [4 5 6]] 
    横向堆叠后:
     [1 2 3 4 5 6]

    Ndarray转化成其它数据结构

    arr3 = np.array([[1,2,3],[4,5,6]])
    print('转换前的Ndarray是:\n',arr3)
    import pandas as pd
    dfFromNdarray = pd.DataFrame(arr3)
    print('Ndarray转化为DataFrame的结果是:\n',dfFromNdarray) #带行号和列号

    转换前的Ndarray是:
     [[1 2 3]
     [4 5 6]]
    Ndarray转化为DataFrame的结果是:
        0  1  2
    0  1  2  3
    1  4  5  6

    arrFromDataFrame = dfFromNdarray.values
    print('DataFrame转化为Ndarry的结果是:\n',arrFromDataFrame) #只提取value值

    DataFrame转化为Ndarry的结果是:
     [[1 2 3]
     [4 5 6]]

    矩阵(Matrix)

    创建Matrix

    • 使用mat()方法可以把其他数据结构的对象转换为矩阵类型。

    array1 = [1,2,3]
    array2 = [6,7,8]
    array3 = [11,12,17]
    matrix = np.mat([array1,array2,array3])
    print('显示该数据结构类型:',type(matrix))
    print(matrix)

    显示该数据结构类型:
    [[ 1  2  3]
     [ 6  7  8]
     [11 12 17]]

    创建随机矩阵,在numpy中包含了许多创建特殊矩阵的方法,这里使用 empty() 方法创建一个新的数据随机的矩阵

    matrix1 = np.empty((3,3))
    print(matrix1)

    [[ 0.00000000e+000  0.00000000e+000  0.00000000e+000]
     [ 0.00000000e+000  0.00000000e+000  2.27270197e-321]
     [ 9.30350261e+199  1.10343781e-312 -3.38460783e+125]]

    Matrix查询操作

    • 在矩阵中有一下常用属性用于观察矩阵

    print('矩阵每维的大小:',matrix.shape)
    print('矩阵所有数据的个数:',matrix.size)
    print('矩阵每个数据的类型:',matrix.dtype)

    矩阵每维的大小: (3, 3)
    矩阵所有数据的个数: 9
    矩阵每个数据的类型: int32

    Matrix增加操作

    • 矩阵合并。c_() 方法进行连接,根据参数顺序也将决定生产矩阵的结果;r_() 方法用于列连接。

    mat1 = np.mat([[1,2],[3,4]])
    mat2 = np.mat([4,5])
    matrix_r = np.c_[mat1,mat2.T]
    print('将mat2矩阵添加在原矩阵右侧\n',matrix_r)
    matrix_l = np.c_[mat2.T,mat1]
    print('将mat2矩阵添加在原矩阵左侧\n',matrix_l)
    matrix_u = np.r_[np.mat([array1]),matrix]
    print('在原矩阵上方连接矩阵\n',matrix_u)

    将mat2矩阵添加在原矩阵右侧
     [[1 2 4]
     [3 4 5]]
    将mat2矩阵添加在原矩阵左侧
     [[4 1 2]
     [5 3 4]]
    在原矩阵上方连接矩阵
     [[ 1  2  3]
     [ 1  2  3]
     [ 6  7  8]
     [11 12 17]]

    Matrix删除操作

    • delete() 方法可以删除矩阵的指定行列,具体类似数组中的用法。

    matrix2 = np.delete(matrix,1,axis = 1)
    print('删除第一行后的结果\n',matrix2)
    matrix3 = np.delete(matrix,1,axis=0)
    print('删除第一列后的结果\n',matrix3)

    删除第一行后的结果
     [[ 1  3]
     [ 6  8]
     [11 17]]
    删除第一列后的结果
     [[ 1  2  3]
     [11 12 17]]

    Matrix特殊操作

    1.矩阵运算,在矩阵运算中,* 被重写用于矩阵乘法,dot() 则用于计算矩阵点乘

    2.如果需要对应位置相乘,则需使用其它函数。

    mat3 = np.mat([[5,6],[7,8]])
    matrix4 = mat1*mat3
    print('矩阵乘法结果\n',matrix4)
    matrix5 = mat1.dot(mat3)
    print('矩阵点乘结果\n',matrix5)

    矩阵乘法结果
     [[19 22]
     [43 50]]
    矩阵点乘结果
     [[19 22]
     [43 50]]

    矩阵常用函数。矩阵也可以使用 .T 进行转置。linalg.inv() 可以用于求逆运算,若不存在逆矩阵则报错。

    matrix6 = matrix.T
    matrix7 = np.linalg.inv(mat1)
    print('\n矩阵转置后:\n',matrix6,
          '\n矩阵求逆后:\n',matrix7)

    矩阵转置后:
     [[ 1  6 11]
     [ 2  7 12]
     [ 3  8 17]] 
    矩阵求逆后:
     [[-2.   1. ]
     [ 1.5 -0.5]]

    求矩阵特征值(使用numpy必须是方阵)

    matrix8 = np.linalg.eig(matrix)
    print(matrix8)

    (array([24.88734753, -0.8418908 ,  0.95454327]), matrix([[-0.1481723 , -0.87920199,  0.10036602],
            [-0.4447565 ,  0.3814255 , -0.82855015],
            [-0.88331004,  0.28551435,  0.550846  ]]))

    Matrix转换为其它数据结构

    由于结构相似,矩阵常常与列表和数组进行数据类型转换。

    print('矩阵列表转换:\n',matrix.tolist(),
          '\n矩阵转数组:\n',np.array(matrix))

    矩阵列表转换:
     [[1, 2, 3], [6, 7, 8], [11, 12, 17]] 
    矩阵转数组:
     [[ 1  2  3]
     [ 6  7  8]
     [11 12 17]]

    Pandas中的数据结构,包括Series和DataFrame

    序列(Series)

    创建Series

    • 引入Pandas包并取别名pd

    import pandas as pd
    • 首先建立一个字典,使用 Series() 方法将字典转换成序列对象,字典的key会自动成为series的index;若转换列表,则生产的序列对象会自动赋予index值。

    sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
    s0 = pd.Series(sdata)
    print('利用字典生成的序列对象\n',s0)
    print('显示该数据结构类型:',type(s0))
    s1 = pd.Series([6,1,2,9])
    print('利用列表生成的序列对象\n',s1)

    利用字典生成的序列对象
     Ohio      35000
    Texas     71000
    Oregon    16000
    Utah       5000
    dtype: int64
    显示该数据结构类型:
    利用列表生成的序列对象
     0    6
    1    1
    2    2
    3    9
    dtype: int64

    • 添加索引,通过指定index为series增加索引

    s1 = pd.Series([6,1,2,9],index=['a','b','c','d'])
    print(s1)

    a    6
    b    1
    c    2
    d    9
    dtype: int64

    Series查询操作

    • values 显示series中的值,index 显示索引,此外还可以按照索引值显示元素。

    print('序列的值\n',s0.values)
    print('序列的索引\n',s0.index)
    print('按照下标查找序列',s0[2])
    print('按照索引值查找元素',s0['Utah'])
    print('按照下标批量查找序列\n',s0[:2])
    print('按照索引值批量查找元素\n',s0[['Ohio','Oregon']])

    序列的值
     [35000 71000 16000  5000]
    序列的索引
     Index(['Ohio', 'Texas', 'Oregon', 'Utah'], dtype='object')
    按照下标查找序列 16000
    按照索引值查找元素 5000
    按照下标批量查找序列
     Ohio     35000
    Texas    71000
    dtype: int64
    按照索引值批量查找元素
     Ohio      35000
    Oregon    16000
    dtype: int64

    Series增加操作

    • append() 方法为series增加元素,index可以指定索引值。

    s2 = s1.append(pd.Series([12],index=['e']))
    print(s2)

    a     6
    b     1
    c     2
    d     9
    e    12
    dtype: int64

    Series删除操作

    • 删除Series中的元素(只能通过index来删除元素)

    s3 = s1.drop('a')
    print(s3)

    dtype: int64
    b    1
    c    2
    d    9

    dtype: int64

    Series修改操作

    • 序列中可以直接根据索引查找并更新元素。

    s1['a'] = 4 #将s1中index为a的元素更改为4
    print(s1)

    a    4
    b    1
    c    2
    d    9
    dtype: int64

    Series特殊操作

    • 序列排序。sort_values()方法可以使用series的值按照升序排序。

    print(s1.sort_values)

    a    4

    b    1
    c    2
    d    9
    dtype: int64>

    • 序列求中位数。median()方法可以直接得到序列的中位数,在此之上可以进行比较等操作。

    print(s1)
    print('中位数为:'+str(s1.median()))
    print('大于序列中位数的数\n',s1[s1>s1.median()])

    中位数为:3.0
    大于序列中位数的数
     a    4
    d    9
    dtype: int64

    • 序列的运算,两个series之间的运算,可以加减乘除(必须保证index是一致的)。

    s2 = pd.Series([4,3,5,8],index=['a','b','c','d'])
    print(s2+s1)

    a     8
    b     4
    c     7
    d    17
    dtype: int64

    • 时间序列。pandas包中的data_range()方法可以生成时间序列,便于进行数据的处理。

    s3 = pd.Series([100,150,200])
    print('产生的序列是:\n',s3)
    idx = pd.date_range(start='2019-9',freq='M',periods=3)
    print('\n生成的时间序列是:\n',idx)
    s3.index = idx
    print('\n产生的时间序列是:\n',s3)

    产生的序列是:
     0    100
    1    150
    2    200
    dtype: int64

    生成的时间序列是:
     DatetimeIndex(['2019-09-30', '2019-10-31', '2019-11-30'], dtype='datetime64[ns]', freq='M')

    产生的时间序列是:
     2019-09-30    100
    2019-10-31    150
    2019-11-30    200
    Freq: M, dtype: int64

    Series转换为其它数据结构

    dfFromSeries = s2.to_frame()
    print('Series转DataFrame\n',dfFromSeries)
    print('显示数据结构类型:',type(dfFromSeries))

    Series转DataFrame
        0
    a  4
    b  3
    c  5
    d  8
    显示数据结构类型:

    dictFromSeries = s2.to_dict()
    print('Series转Dict\n',dictFromSeries)
    print('显示数据结构类型:',type(dictFromSeries))

    Series转Dict
     {'a': 4, 'b': 3, 'c': 5, 'd': 8}
    显示数据结构类型:

    数据框(DataFrame)

    创建DataFrame

    引入pandas包,创建DataFrame对象。首先创建字典,之后使用 DataFrame() 方法创建数据框对象。通过index.name给其索引命名。最后使用 to_csv 和 to_excel 方法将其保存为csv和excel文件;也可以用列表进行创建:pd.DataFrame(data,columns,index)。

    dic1 = {'name':['Tom','Lily','Cindy','Petter'],'no':['001','002','003','004'],'age':[16,16,15,16],'gender':['m','f','f','m']}
    df1 = pd.DataFrame(dic1)
    print('显示该数据结构类型',type(df1))
    df1.index.name = 'id'
    #df1.to_csv('students.csv')
    #df1.to_excel('students.xls')     !!!会报错
    print(df1)

    显示该数据结构类型
          name   no  age gender
    id                         
    0     Tom     001   16      m
    1     Lily      002   16      f
    2     Cindy  003   15      f
    3     Petter  004   16      m

    DataFrame 查询操作

    • 通过 DataFrame.name 可以返回索引值为name的整列数据,而 DataFrame.loc[i] 可以返回指定行数的全部数据。除此之外也可以使用根据时间序列查找内容。

    • !!!loc[ ]  按列名称   iloc[ ] 按列号 操作

    • 获取列索引:df.cloums 

    • 获取行索引:df.index

    • 获取值:df.value

    column = df1.no
    row = df1.loc[3]
    print('\n列数据索引\n',column,'\n行数据索引\n',row)

    列数据索引
     id
    0    001
    1    002
    2    003
    3    004
    Name: no, dtype: object 
    行数据索引
    name        Petter
    no             004
    age           16
    gender      m
    Name: 3, dtype: object

    DataFrame增加操作

    • 使用 append() 方法增加一名同学的信息,这里根据行索引分别添加值。update() 方法可以给数据框增加列。

    print('修改前:\n',df1)
    df2 = df1.append([{'name':'Stark','no':'005','age':15,'gender':'m'}],ignore_index=True) #接着索引号为4,不写的话就是0
    print('增加行:\n',df2)
    df2['new_Col'] = [1,2,3,4,5]
    print('增加列:\n',df2)

    修改前:
           name   no  age gender
    id                         
    0     Tom  001   16      m
    1     Lily    002   16       f
    2    Cindy  003   15      f
    3   Petter  004   16      m
    增加行:
          name   no  age gender
    0   Tom    001   16      m
    1   Lily     002   16      f
    2   Cindy  003   15      f
    3  Petter  004   16      m
    4   Stark  005   15      m
    增加列:
          name   no  age gender  new_Col
    0   Tom  001     16      m        1
    1    Lily  002     16      f        2
    2   Cindy  003   15      f        3
    3  Petter  004   16      m        4
    4   Stark  005   15      m        5

    DataFrame删除操作

    • 使用 drop 方法删除'address'列,还可以通过修改参数删除行。除此之外通过 del 指令可以删除指定索引值的整列数据(操作一旦进行即不可回复)。

    df3 = df1.copy()
    print('处理前的数据\n',df1)
    df3b = df3.drop(['name'],axis=1)
    print('删除列后的数据框\n',df3b)
    df3c = df3.drop([2])
    print('删除行后的数据框\n',df3c)

    处理前的数据
           name   no  age gender
    id                         
    0      Tom  001   16      m
    1     Lily  002   16      f
    2    Cindy  003   15      f
    3   Petter  004   16      m
    删除列后的数据框
          no  age gender
    id                 
    0   001   16      m
    1   002   16      f
    2   003   15      f
    3   004   16      m
    删除行后的数据框
           name   no  age gender
    id                         
    0      Tom  001   16      m
    1     Lily  002   16      f
    3   Petter  004   16      m

    DataFrame修改操作

    • 数据框按列合并(效果和增加列相同)

    df4 = pd.DataFrame({'address':['school','home','school','school','home']})
    df5 = pd.concat([df2,df4],axis=1)
    print('合并前的df2\n',df2)
    print('合并前的df4\n',df4)
    print('合并后的df5\n',df5)

    合并前的df2
          name   no  age gender  new_Col
    0     Tom  001   16      m        1
    1    Lily  002   16      f        2
    2   Cindy  003   15      f        3
    3  Petter  004   16      m        4
    4   Stark  005   15      m        5
    合并前的df4
       address
    0  school
    1    home
    2  school
    3  school
    4    home
    合并后的df5
          name   no  age gender  new_Col address
    0     Tom  001   16      m        1  school
    1    Lily  002   16      f        2    home
    2   Cindy  003   15      f        3  school
    3  Petter  004   16      m        4  school
    4   Stark  005   15      m        5    home

    • 数据框按行合并(效果和增加学生信息相同)

    df6 = pd.DataFrame({'name':['Tony'],'no':['005'],'age':[16],'gender':['m']})
    df7 = pd.concat([df1,df6],axis=0)
    print('合并前的df1\n',df1)
    print('合并前的df6\n',df6)
    print('合并后的df7\n',df7)
    合并前的df1
           name   no  age gender
    id                         
    0      Tom  001   16      m
    1     Lily  002   16      f
    2    Cindy  003   15      f
    3   Petter  004   16      m
    合并前的df6
        name   no  age gender
    0  Tony  005   16      m
    合并后的df7
          name   no  age gender
    0     Tom  001   16      m
    1    Lily  002   16      f
    2   Cindy  003   15      f
    3  Petter  004   16      m
    0    Tony  005   16      m

    DataFrame 特殊操作

    • 数据框的时间序列。通过  date_range  函数生成序列并加入数据中,列如创建从2019年9月21日开始的连续4天的时间序列。使用pandas包中的 read_csv() 方法读取之前保存的学生数据,更新数据后可以看到生成的时间序列已经加入到了数据框中

    i1 = pd.date_range('2019/9/21',periods=4,freq='7D')
    df10 = pd.read_csv('students.csv')
    df10.index = i1
    print(df10)

                id    name  no  age gender
    2019-09-21   0     Tom   1   16      m
    2019-09-28   1    Lily   2   16      f
    2019-10-05   2   Cindy   3   15      f
    2019-10-12   3  Petter   4   16      m

    时间序列查询

    print('\n根据时间序列索引得到的值\n',df10.loc['2019-09-21':'2019-09-30',['gender','age','name']])

    根据时间序列索引得到的值
                gender  age  name
    2019-09-21      m   16   Tom
    2019-09-28      f   16  Lily

    DataFrame转换为其它数据结构

    print('DataFrame转ndarray\n',df10.values,
          '\nDataFrame转series\n',df10['gender'])

    DataFrame转ndarray
     [[0 'Tom' 1 16 'm']
     [1 'Lily' 2 16 'f']
     [2 'Cindy' 3 15 'f']
     [3 'Petter' 4 16 'm']] 
    DataFrame转series
     2019-09-21    m
    2019-09-28    f
    2019-10-05    f
    2019-10-12    m
    Freq: 7D, Name: gender, dtype: object

    python原生数据结构

    元组(Tuple)

    1. 使用()、tuple()创建元组,元组可以为空且元素类型可以不同;

    2. 若元组中仅包含一个数字,则应该添加逗号以区别运算符号:tup=(1,);

    3. 元组一旦创建就无法对其元素进行增加、删除、修改。

    Tuple查询操作

    • 元组可以使用下标索引来访问元组中的值。

    tup1=('Google','Runoob',1997,2000)
    tup2=(1,) #创建单个数字元组
    print("tup1[0]:",tup1[0]) #访问元组中第一各元素
    print("tup2[1:5]:",tup2[1:5])

    tup1[0]: Google
    tup2[1:5]: ()

    Tuple整体删除操作

    • 使用del方法可以删除指定的元组对象,但无法删除指定下标的元组元素。

    Tuple连接和复制

    • 虽然元组中的元素不允许修改,但可以对元组进行连接组合创建出一个新的元组。

    tup3=tup1+tup2
    tup4=tup2*3 #复制三份

    Tuple其它操作

    1. len() 返回元组元素个数;

    2. max()/min() 返回元组元素中的最大、最小元素。

    Tulpe转换为其它数据结构(举例)

    • 元组可以转换为字符串、列表……不过单个元组无法直接转换成字典

    print("\n元组转列表:\n",list(tup1),
          "\n元组转字符串:\n",tup1.__str__())

    列表(List)

    创建列表

    1. 一维列表的创建。使用[]可以创建一个列表对象,列表是一种有序的集合,可以随时添加和删除其中的元素;

    2. 多维列表的创建。尽管list默认是一维的,但可以使用[]嵌套创建多维列表。

    List查询操作

    1. list[a:b] 返回列表中第a个至第b-1个元素的列表对象;

    2. list[::a] 返回一个从列表第一个元素开始,步长为a的列表对象;

    3. list[i] 返回列表中下标为i的元素,若i为负数,则从列表尾部从后至前访问第i个元素。

    List增加操作

    • append() 可以在列表末尾增加新的项目,可以增加一个元素,也可以增加一个list对象成为多维列表。

    List删除操作

    1. remove() 函数可以删除指定值的元素,list.remove(i)会删除list对象中值为i的元素,若不存在则报错;

    2. pop() 函数可以删除指定下标的元素,默认为列表对象的最后一个元素,list.pop(i)将删除下标为i的元素。

    List修改操作

    • list[i]=x 可以直接替换列表中指定下标的元素

    List其它操作

    1. reverse() 函数可以使列表倒置;

    2. len() 函数可以返回列表的元素个数;

    3. sort() 函数可以使列表元素升序排列。

    List转换为其它数据结构

    • 列表可以便利的转换为各种数据类型;注意,单个列表无法转换为字典。

    集合(Set)

    创建Set

    • 集合不会出现重复值,所有元素按照一定的顺序排列,若元素为数字则按数字大小排列,使用set()函数创建集合会自动的拆分多个字母组成的字符串

    myset = set('aabc') #使用set()函数创建集合会自动的拆分多个字母组成的字符串
    print(myset)
    myset1 = set(('hello','world'))
    print(myset1)

    {'a', 'c', 'b'}
    {'hello', 'world'}

    Set 查询操作

    • 使用in可以判断a是否在集合中,存在为真,反之为假。

    'a' in myset

    Set 增加操作

    1. add() 函数可以在集合对象中加入新元素,若元素已存在,则无效果;

    2. 使用update表示添加(并非修改)是一个一个添加,并且按照顺序添加进集合。

    myset.add('ghk')
    myset.update('tyu')  #一个一个元素添加
    print(myset)

    {'t', 'b', 'a', 'ghk', 'c', 'y', 'u'}

    Set删除操作

    1. remove() 函数可以将集合中的元素删除,元素不存在会报错;

    2. discard() 函数可以删除集合中指定的元素,且元素不存在不报错;

    3. pop() 函数可以随机删除集合中的一个元素(在交互模式下删除最后一个元素);

    4. clear() 函数可以清空集合。

    Set其它操作

    • len() 函数可以查询集合的长度;

    • copy() 可以复制集合中的元素并生成一个新的集合

    copy_myset=myset.copy()
    print('\nlen()返回集合的长度:',len(myset),
          '\ncopy()生成的集合:',copy_myset)

    len()返回集合的长度: 7 
    copy()生成的集合: {'a', 'c', 'u', 't', 'ghk', 'b', 'y'}

    • 集合的运算。首先建立两个集合用于运算,在集合运算中,‘-’表示求差,‘&’表示求和,‘|’表示求并集,'^'表示两个集合的并集减去交集

    a = set('apple')
    b = set('banana')
    print ('\n求差集:',a-b,
           '\n求并集:',a|b,
           '\n求交集:',a&b,
           '\n求各自独特的:',a^b)

    求差集: {'e', 'p', 'l'} 
    求并集: {'p', 'n', 'l', 'a', 'b', 'e'} 
    求交集: {'a'} 
    求各自独特的: {'n', 'p', 'l', 'b', 'e'}

    字典(Dictionary)

    创建Dict

    • 生成一个字典和一个包含三个字典对象的字典列表。(列表中嵌套字典,students实际上是一个列表,students中的元素是字典)

    dict1={"ID":"L100","Name":"COCO"}
    students = [{'name':'n1','id':'001'},{'name':'n2','id':'002'},{'name':'n3','id':'003'}]
    print("显示该数据结构类型",type(dict1))
    print(dict1)

    显示该数据结构类型
    {'ID': 'L100', 'Name': 'COCO'}

    • 使用zip方法创建字典。zip() 方法可以返回元组组成的列表,可以用于快速构建字典。

    demo_dict = dict(zip('abc','123'))
    print(demo_dict)

    {'a': '1', 'b': '2', 'c': '3'}

    Dict查询操作

    • 查找第一个学生的学号(显示出第一个字典元素id键的值);此外还可以使用get(key,default=None)方法获取指定键的值。

    print('常规查询:',students[0]['id'])
    print('根据键查询:',students[0].get('id'))

    常规查询: 001
    根据键查询: 001

    Dict增加操作

    • 添加一名学生的信息(增加行,其实是增加列表中一个元素),之后再添加一个学生信息科目(增加列,其实就是增加字典中一个键值对)

    students.append({'name':'n4','id':'004'})
    print('添加一个字典对象后:',students)
    students[0]['school']='school1'
    students[1]['school']='school2'
    students[2]['school']='school2'
    print('增加键值对后的字典:',students)

    添加一个字典对象后: [{'name': 'n1', 'id': '001'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}, {'name': 'n4', 'id': '004'}]
    增加键值对后的字典: [{'name': 'n1', 'id': '001', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}, {'name': 'n4', 'id': '004'}]

    Dict删除操作

    • 使用del删除一名学生的信息(删除行,其实就是删除列表中的一个元素)。再使用pop删除第一个学生的学号(删除某一行中的列,其实是删除字典中的一个键值对)

    del students[3] #删除第4行(下标为3)
    print('删除列表中的一个字典对象后:\n',students)
    students[0].pop('id')
    print('删除一个键值对后:\n',students)

    删除列表中的一个字典对象后
     [{'name': 'n1', 'id': '001', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}]
    删除一个键值对后
     [{'name': 'n1', 'school': 'school1'}, {'name': 'n2', 'id': '002', 'school': 'school2'}, {'name': 'n3', 'id': '003', 'school': 'school2'}]

    • 删除所有学生的学号(删除某一列,其实就是删除所有字典中的一个键值对)

    for i in range(0,len(students)):
        students[i].pop('school')
    print(students)

    [{'name': 'n1'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}]

    Dict修改操作

    • 添加(更改)第一个学生的学号(在列表的第一个字典元素中增加/更改键值对)

    students[0].update({'id':'001'})
    print('\n更新后的字典\n',students)

    更新后的字典
     [{'name': 'n1', 'id': '001'}, {'name': 'n2', 'id': '002'}, {'name': 'n3', 'id': '003'}]

    Dict转换为其它数据结构

    • 字典的键和值可以被单独各自转换为list

    print("字典值转List:",list(demo_dict.values()))
    print("字典键转List:",list(demo_dict.keys()))

    字典值转List: ['1', '2', '3']
    字典键转List: ['a', 'b', 'c']

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    IntelliJ IDEA macOS版
    IntelliJ IDEA macOS版

    IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

    PyCharm macOS版
    PyCharm macOS版

    JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

    WebStorm macOS版
    WebStorm macOS版

    JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

    After Effects macOS版
    After Effects macOS版

    Adobe After Effects 是面向动态图形、影视特效与视频合成的专业创作软件。它提供关键帧动画、遮罩抠像、运动跟踪、三维空间、文字动画和表达式等工具,并可与 Premiere Pro、Photoshop、Illustrator

    Audition macOS版
    Audition macOS版

    Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

    Bridge macOS版
    Bridge macOS版

    Adobe Bridge 是面向摄影师、设计师及内容团队的免费数字资产管理工具,可集中预览照片、视频和 Adobe 项目文件,并利用评级、标签、关键词、元数据、筛选与收藏集完成分类检索。它还支持批量重命名、格式导出、相机导入及 Camera

    Illustrator macOS版
    Illustrator macOS版

    Adobe Illustrator 是 Adobe 推出的专业矢量图形设计软件,适合在 Mac 上制作标志、图标、插画、包装、信息图及印刷版面。它以路径和锚点构建可无损缩放的图形,并提供钢笔、形状、文字、图像描摹、渐变、画板及生成式功能。

    InDesign macOS版
    InDesign macOS版

    Adobe InDesign 是面向印刷品与数字出版物的专业版面设计软件,可在 Mac 上制作书籍、杂志、宣传册、海报、报告及交互式文档。它提供精细的文字样式、网格、母版、长文档管理和印前输出能力。

    Lightroom Classic macOS版
    Lightroom Classic macOS版

    Adobe Lightroom Classic 是面向桌面摄影工作流的照片管理与后期处理软件,可将原始照片保存在本地硬盘,通过目录、关键词、评分和收藏夹高效整理图库,并提供 RAW 冲印、蒙版、镜头校正、批量同步及多格式导出等功能。

    Media Encoder macOS版
    Media Encoder macOS版

    Adobe Media Encoder 是 Adobe 推出的专业音视频编码与转码工具,可通过队列、预设和监视文件夹批量完成格式转换、代理文件创建及多平台成片输出,并与 Premiere Pro、After Effects 等软件紧密协作。

    Photoshop macOS版
    Photoshop macOS版

    Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理软件,提供图层、蒙版、选区、修复、调色、文字排版、智能对象及生成式编辑等能力。Mac 版支持 Intel 与 Apple Silicon 处理器。

    Premiere Pro macOS版
    Premiere Pro macOS版

    Adobe Premiere Pro 是面向专业视频制作的非线性剪辑软件,提供多轨时间线、调色、音频处理、字幕、代理工作流和多格式输出能力,并可与 After Effects、Audition、Photoshop 及 Frame.io 协同

    WINDOWS 更多
    IntelliJ IDEA Windows版
    IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    PhpStorm Windows版
    PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    PyCharm Windows版
    PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

    WebStorm Windows版
    WebStorm Windows版

    WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

    Photoshop Windows版
    Photoshop Windows版

    Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许

    InDesign Windows版
    InDesign Windows版

    Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator

    Illustrator Windows版
    Illustrator Windows版

    Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。

    Bridge Windows版
    Bridge Windows版

    Adobe Bridge 是 Adobe 推出的创意资产管理工具,可集中预览、分类和查找照片、视频、PDF及多种设计文件,并支持元数据、关键词、评级、批量重命名和格式导出。它可与 Photoshop、Illustrator 等应用衔接,

    Lightroom Classic Windows版
    Lightroom Classic Windows版

    Adobe Lightroom Classic 是面向 Windows 桌面摄影工作流的照片管理与无损编辑工具,可通过目录集中整理大型图库,并完成 RAW 显影、局部蒙版、批量调整、打印和多格式导出。它强调本地文件管理与精细控制,

    Acrobat Pro Windows版
    Acrobat Pro Windows版

    Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,

    After Effects Windows版
    After Effects Windows版

    Adobe After Effects 是面向动态图形、动画与影视视觉特效制作的专业工具,可完成关键帧动画、图层合成、遮罩跟踪、抠像、文字动画和二维三维元素整合。Windows 版通过 Adobe Creative Cloud 安装及更新,

    Media Encoder Windows版
    Media Encoder Windows版

    Adobe Media Encoder 是 Adobe 面向视频与音频制作流程提供的专业编码和转码工具,可批量处理媒体文件、创建代理、套用输出预设并监控文件夹自动执行任务。它与 Premiere、After Effects、Audition