zoukankan      html  css  js  c++  java
  • Python列表数据类型详解

    Python列表数据类型详解

    列表就是一组有序的数据组合,列表中的数据可以被修改

    列表的定义

    • 使用中括号进行定义[]
    • 使用list函数进行定义
    • 元素之间使用逗号进行分隔 [1,2,3,4]
    • 列表中的元素可以是任意类型

    列表的增删改查

    # 列表的定义
    varlist=[1,2,3,4,5]
    varlist1=['a','b','c','d','e']
    
    # 列表的拼接
    print(varlist+varlist1) # [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']
    print(varlist*2) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    
    # 检测元素是否存在列表中
    print('a' in varlist1) # True
    
    # 列表索引操作
    print(varlist[0])
    print(varlist[-4])
    
    # 通过下标修改元素,但不可以通过下标添加元素
    varlist[0]='aa'
    print(varlist) #['aa', 2, 3, 4, 5]
    varlist[0]=1
    
    # 向列表中添加元素
    varlist.append(6)
    print(varlist) # [1, 2, 3, 4, 5, 6]
    
    #获取列表的长度 len()
    print(len(varlist)) # 6
    

    列表的切片操作

    # 从索引的开始到最后进行截取
    varlist=['python','java','php','c','c++','vb','shell']
    print(varlist[2:]) # ['php', 'c', 'c++', 'vb', 'shell']
    
    # 截取到指定的索引位置
    print(varlist[:2]) # ['python', 'java']
    
    # 截取指定索引范围内的数据
    print(varlist[2:6]) # ['php', 'c', 'c++', 'vb']
    
    # 索引区间加步进
    print(varlist[0:-1:2]) # ['python', 'php', 'c++']
    
    # 截取列表中所有元素[:] [::]
    print(varlist[:])
    print(varlist[::])
    
    # 使用切片方法对列表进行数据更新和删除
    # 从指定下标开始到结束,替换为相应数据,整型无法操作
    varlist[0:4]='abc'
    print(varlist) # ['a', 'b', 'c', 'c++', 'vb', 'shell']
    
    # 根据步进值进行更新
    varlist[2:6:2]=['A','B']
    print(varlist) # ['a', 'b', 'A', 'c++', 'B', 'shell']
    
    # 根据索引进行删除
    del varlist[2:6]
    print(varlist) # ['a', 'b']
    

    列表的相关函数

    # varlist.extend() 扩展列表
    varlist=['python','java','php','c','c++','vb','shell','php']
    varlist1=[1,2,3]
    varlist.extend(['a,b,c'])
    print(varlist) # ['python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php', 'a,b,c']
    varlist.extend(varlist1)
    print(varlist) # ['python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php', 'a,b,c', 1, 2, 3]
    
    # varlist.clear() 清空列表内容
    varlist1.clear()
    print(varlist1)
    
    # varlist.reverse() # 翻转列表
    varlist.reverse()
    print(varlist) # [3, 2, 1, 'a,b,c', 'php', 'shell', 'vb', 'c++', 'c', 'php', 'java', 'python']
    
    # varlist.sort() 列表排序
    varlist=[2,3,4,1,5,7,3,4,7,8,4,0,7,45,23]
    varlist.sort(reverse=True) #对列表进行从大到小排序
    print(varlist) # [45, 23, 8, 7, 7, 7, 5, 4, 4, 4, 3, 3, 2, 1, 0]
    
    varlist.sort() # 默认对列表进行从小到大排序
    print(varlist) # [0, 1, 2, 3, 3, 4, 4, 4, 5, 7, 7, 7, 8, 23, 45]
    
    varlist.reverse() # 翻转列表
    print(varlist) # [45, 23, 8, 7, 7, 7, 5, 4, 4, 4, 3, 3, 2, 1, 0]
    
    #传出函数,根据函数计算规则进行排序
    varlist.sort(key=abs)
    print(varlist) # [0, 1, 2, 3, 3, 4, 4, 4, 5, 7, 7, 7, 8, 23, 45]
    
    # varlist.copy() 复制一个列表
    res=varlist.copy()
    print(res)
    

    深拷贝与浅拷贝

    # 浅拷贝对于多维列表不能拷贝,只能引用
    varlist=[[1,2,3],['a','b','c']]
    newlist=varlist.copy()
    print(newlist[0],id(newlist[0]))
    print(varlist[0],id(varlist[0]))
    
    # 深拷贝
    import copy
    
    varlist1=[1,2,3,['a','b','c']]
    newlist1=copy.deepcopy(varlist1)
    print('---------------')
    print(newlist1[1],id(newlist[1]))
    print(varlist1[1],id(varlist[1]))
    

    列表推导式

    列表推导式提供了简单的创建列表的方法

    使用表达式的方式,对数据进行过滤并且把结果组成一个新列表

    #计算0-9的平房列表
    varlist=[]
    for i in range(10):
        res = i**2
        varlist.append(res)
    print(varlist)
    #简化方法
    varlist=list(map(lambda i:i**2,range(10)))
    print(varlist)
    #使用列表推导式
    """
    1.变量=[变量或变量的处理结果 for i in 容器类型数据]
    2.变量=[变量或变量的处理结果 for i in 容器类型数据 条件表达式]
    """
    varlist=[i**2 for i in range(10)]
    print(varlist)
    
    #使用列表推导式完成字符串*2后的结果生成新的list
    varstr='1234'
    varlist=[int(i)*2 for i in varstr]
    print(varlist)
    
    # 使用位运算完成
    varstr='1234'
    varlist=[int(i)<<3 for i in varstr]
    print(varlist)
    
    #带有判断条件的列表推导式
    #求0-9的所有偶数
    varlist=[]
    res=[i for i in range(10) if i%2==0 ]
    print(res)
    
    #多循环推导式
    # [1,2,3]  [3,1,4] 两个列表中的元素进行两两组合,且不可重复
    x=[1,2,3]
    y=[3,1,4]
    varlist=[(i,j) for i in x for j in y if i!=j]
    print(varlist)
    
    #练习题
    """
    转换:字典{'username':'admin','age':20,'phone':133}
    换成:列表['username=admin','age=20','phone=133']
    扩展:username=admin&age=20&phone=133
    """
    vardict={'username':'admin','age':20,'phone':133}
    varlist=[i+'='+str(vardict[i]) for i in vardict]
    print(varlist)
    str='&'.join(varlist)
    print(str)
    
    """
    转换:['AAA','BBb','CCcc']
    换成:['aaa','bbb','ccc']
    换成:['AAA', 'BBB', 'CCCC']
    """
    varlist=['AAA','BBb','CCcc']
    newlist=[i.upper() for i in varlist]
    print(newlist)
    newlist=[i.lower() for i in varlist]
    print(newlist)
    
    """
    x 是0-5的偶数,y是0-5的奇数,把x,y组成元组,放到列表中
    """
    varlist=[(x,y) for x in range(6) for y in range(6) if x % 2==0 and y % 2 ==1]
    print(varlist)
    
  • 相关阅读:
    POJ1769 Minimizing maximizer(DP + 线段树)
    ZOJ3201 Tree of Tree(树形DP)
    POJ3613 Cow Relays(矩阵快速幂)
    POJ3635 Full Tank?(DP + Dijkstra)
    ZOJ3195 Design the city(LCA)
    POJ3368 Frequent values(RMQ线段树)
    POJ3686 The Windy's(最小费用最大流)
    HDU4871 Shortest-path tree(最短路径树 + 树的点分治)
    POJ3013 Big Christmas Tree(最短路径树)
    Gym100685G Gadget Hackwrench(倍增LCA)
  • 原文地址:https://www.cnblogs.com/hekaiqiaq/p/15541056.html
Copyright © 2011-2022 走看看