zoukankan      html  css  js  c++  java
  • Python列表(list)详解

    Python 内置的四种常用数据结构:列表(list)、元组(tuple)、字典(dict)以及集合(set)。

    这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因为程序不仅需要使用单个变量来保存数据,还需要使用多种数据结构来保存大量数据,而列表、元组、字典和集合就可满足保存大量数据的需求。

    列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,每个元素都有自己的索引,因此列表和元组都可通过索引访问元素。二者的区别在于元组是不可修改的,但列表是可修改的。

    字典(dict)和集合(set)类似,它们存储的数据都是无序的,其中字典是用 key-value 的形式保存数据

    python 序列详解

    所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

    无论是采用正索引值,还是负索引值,都可以访问序列中的任何元素。

    注意,在使用负值作为列序中各元素的索引值时,是从 -1 开始,而不是从 0 开始。
    [root@kube list]# cat demo1.py 
    str="Py序列化详解"
    print(str[0],"---",str[-6])
    print(str[5],"---",str[-1])
    [root@kube list]# py demo1.py 
    P --- y
    详 --- 解
    [root@kube list]# 

    序列切片

    切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。

    序列实现切片操作的语法格式如下:

    sname[start : end : step]
    其中,各个参数的含义分别是:
    sname:表示序列的名称;
    start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
    end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
    step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
    [root@kube list]# cat  demo2.py
    str="py序列切片"
    print(str[:0])                #end 为0 表示结束索引位置但是不包括该位置,因此为空 
    print(str[:1])
    print(str[:2])
    print(str[1:2])
    num="123456789"
    print(num[1:5:2])             #在1-5 的区间中隔两位取一个值
    [root@kube list]# py demo2.py 
    
    p
    py
    y
    24
    [root@kube list]# 

     序列相加

    Python 中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。

    里所说的“类型相同”,指的是“+”运算符的两侧序列要么都是序列类型,要么都是元组类型,要么都是字符串。
    root@kube list]# cat demo3.py 
    print("你好"+"我好"+"dajiahao")
    [root@kube list]# py demo3.py 
    你好我好dajiahao
    [root@kube list]# 

    序列相乘

    Python 中,使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果

    [root@kube list]# cat demo3.py 
    str="你好"+"我好"+"dajiahao"
    print(str*3)
    [root@kube list]# py demo3.py 
    你好我好dajiahao你好我好dajiahao你好我好dajiahao
    [root@kube list]# 

     检查元素是否包含在序列中

    Python 中,可以使用 in 关键字检查某元素是否为序列的成员,其语法格式为:

    value in sequence

    和 in 关键字用法相同,但功能恰好相反的,还有 not in 关键字,它用法检查某个元素是否不包含在指定的序列中

    value not in sequence
    [root@kube list]# cat demo4.py 
    #coding:utf-8
    
    str="test.com.cn"
    print('e' in str)
    print('e' not in str)
    [root@kube list]# py demo4.py 
    True
    False
    [root@kube list]# 

    和序列相关的内置函数

    Python提供了几个内置函数(表 3 所示),可用于实现与序列相关的一些常用操作

    表 3 序列相关的内置函数
    函数功能
    len() 计算序列的长度,即返回序列中包含多少个元素。
    max() 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
    min() 找出序列中的最小元素。
    list() 将序列转换为列表。
    str() 将序列转换为字符串。
    sum() 计算元素和。
    sorted() 对元素进行排序。
    reversed() 反向序列中的元素。
    enumerate() 将序列组合为一个索引序列,多用在 for 循环中。

    [root@kube list]# cat demo5.py 
    str="test.com.cn"
    print(max(str))
    print(min(str))
    print(len(str))
    print(list(str))
    [root@kube list]# py demo5.py 
    t
    .
    11
    ['t', 'e', 's', 't', '.', 'c', 'o', 'm', '.', 'c', 'n']
    [root@kube list]# 

    python list 列表

    Python 中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么 Python 的列表就是一个工厂的仓库。

     从形式上看,列表会将所有元素都放在一对中括号 [] 中,相邻元素之间用逗号分隔,格式中,element1~elementn 表示列表中的元素,个数没有限制,只要是 Python 支持的数据类型就可以。如下所示

    [element1,element2,element3,...,elementn]
    [root@kube list]# cat demo6.py
    lt=['c.test.com',1,[2,3],2.34,'aa']
    print(lt)
    print(type(lt))
    [root@kube list]# py demo6.py 
    ['c.test.com', 1, [2, 3], 2.34, 'aa']
    <class 'list'>
    [root@kube list]# 

    创建列表

    [root@kube list]# cat demo7.py
    lt=[1,'x.test.com',[2,3]]             # = 号赋值使用 []   括起来
    str="1234test"
    print(type(lt))
    print(type(str))
    lt2=list(str)                          #使用 list() 函数转换
    print(lt2)
    print(type(lt2))
    [root@kube list]# py demo7.py 
    <class 'list'>
    <class 'str'>
    ['1', '2', '3', '4', 't', 'e', 's', 't']
    <class 'list'>
    [root@kube list]# 

     python  访问和删除列表

    [root@kube list]# cat  demo8.py
    vol=[1,'test.com',[3,4,5],44,'fff','ee']
    print(vol[:1])
    print(vol[:2])
    print(vol[2:4])
    del vol
    print(vol)
    [root@kube list]# py demo8.py 
    [1]
    [1, 'test.com']
    [[3, 4, 5], 44]
    Traceback (most recent call last):
      File "demo8.py", line 6, in <module>
        print(vol)
    NameError: name 'vol' is not defined
    [root@kube list]# 

    python list 列表添加元素的三种方法

    append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:

    listname.append(obj)

    当然,如果希望不将被追加的列表或元组当成一个整体,而是只追加列表中的元素,则可使用列表提供的 extend() 方法。extend()方法的语法格式如下:

    listname.extend(obj)

     如果希望在列表中间增加元素,则可使用列表的 insert() 方法,此方法的语法格式为:

    listname.insert(index , obj)

    其中,index 参数指的是将元素插入到列表中指定位置处的索引值。

    使用 insert() 方法向列表中插入元素,和 append() 方法一样,无论插入的对象是列表还是元组,都只会将其整体视为一个元素。

    [root@kube list]# cat demo9.py
    a_list=['test.com.cn',2,[2,'a']]
    a_list.append('b')
    print(a_list)
    a_list.extend([9,8,7])
    print(a_list)
    a_list.insert(4,'MM')
    print(a_list)
    [root@kube list]# py demo9.py 
    ['test.com.cn', 2, [2, 'a'], 'b']
    ['test.com.cn', 2, [2, 'a'], 'b', 9, 8, 7]
    ['test.com.cn', 2, [2, 'a'], 'b', 'MM', 9, 8, 7]
    [root@kube list]# 

    python list 列表删除元素的三种方法

    在列表中删除元素,主要分为以下 3 种应用场景:

    1. 根据目标元素所在位置的索引值进行删除,可使用 del 语句;
    2. 根据元素的值进行删除,可使用列表(list类型)提供的 remove() 方法;
    3. 将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法。
    [root@kube list]# cat demo10.py 
    a_list=[1,2,"a.b.c",[4,5],(2,4)]
    print(a_list)
    del a_list[-2]
    print(a_list)
    a_list.remove(2)
    print(a_list)
    a_list.clear()
    print(a_list)
    [root@kube list]# py demo10.py 
    [1, 2, 'a.b.c', [4, 5], (2, 4)]
    [1, 2, 'a.b.c', (2, 4)]
    [1, 'a.b.c', (2, 4)]
    []
    [root@kube list]# 

    python list 修改元素

    列表的元素相当于变量,因此程序可以对列表的元素赋值,这样即可修改列表的元素

    slice 分片同样可以使用

    [root@kube list]# cat demo11.py 
    a_list=list(range(0,10))       #list() 函数转换为列表
    print(a_list)
    a_list[2]='a'                  #替换序列为2 的值
    print(a_list)
    a_list[-1]='ffff'              #替换序列为-1 的值
    print(a_list)
    a_list[3:4]=['s','d']          #替换分片3-4 的值
    print(a_list)
    a_list[4:6]=[]                 #把 4-6 的值替换为空
    print(a_list)
    a_list[1:3]='test'              #对列表使用 slice 语法赋值时,不能使用单个值;如果使用字符串赋值,Python 会自动把字符串当成序列处理,其中每个字符都是一个元素。
    print(a_list)
    a_list[2:6:2]=['MM','NN']       #在使用 slice 语法赋值时,也可指定 step 参数。但如果指定了 step 参数,则要求所赋值的列表元素个数与所替换的列表元素个数相等
    print(a_list)
    [root@kube list]# py demo11.py 
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 'a', 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 'a', 3, 4, 5, 6, 7, 8, 'ffff']
    [0, 1, 'a', 's', 'd', 4, 5, 6, 7, 8, 'ffff']
    [0, 1, 'a', 's', 5, 6, 7, 8, 'ffff']
    [0, 't', 'e', 's', 't', 's', 5, 6, 7, 8, 'ffff']
    [0, 't', 'MM', 's', 'NN', 's', 5, 6, 7, 8, 'ffff']
    [root@kube list]# 

    python list 常用方法

    除前面的增加元素、删除元素、修改元素方法之外,列表还包含了一些常用的方法。

    count() 方法,此方法用于统计列表中某个元素出现的次数

    listname.count(obj)

    index() 方法用于定位某个元素在列表中出现的位置(也就是索引),如果该元素没有出现,则会引发 ValueError 错误。此方法的基本语法格式为

    listname.index(obj,start,end)

    同 count() 方法不同,index() 方法还可传入 start、end 参数,用于在列表的指定范围内搜索元素。

    pop() 方法会移除列表中指定索引处的元素,如果不指定,默认会移除列表中最后一个元素。该方法的基本语法格式为:

    listname.pop(index)

    reverse() 方法会将列表中所有元素反向存放。该方法的基本语法格式为:

    listname.reverse()

    sort() 方法用于对列表元素进行排序,排序后原列表中的元素顺序会方发生改变。sort() 方法的语法格式如下:

    listname.sort(key=None, reserse=False)

    listname.sort(key=None, reserse=False)

    可以看到,和其他方法不同,此方法中多了 2 个参数,它们的作用分别是:
    key 参数用于指定从每个元素中提取一个用于比较的键。例如,使用此方法时设置 key=str.lower 表示在排序时不区分字母大小写。
    reverse 参数用于设置是否需要反转排序,默认 False 表示从小到大排序;如果将该参数设为 True,将会改为从大到小排序。

    下面代码示范了使用列表作为“栈”的示例:

    stack = []
    # 向栈中“入栈”3个元素
    stack.append("fkit")
    stack.append("crazyit")
    stack.append("Charlie")
    print(stack) # ['fkit', 'crazyit', 'Charlie']
    # 第一次出栈:最后入栈的元素被移出栈
    print(stack.pop())
    print(stack) # ['fkit', 'crazyit']
    # 再次出栈
    print(stack.pop())
    print(stack) # ['fkit']

    python range 快速初始化数字列表

    ython range() 函数能够轻松地生成一系列的数字。例如,可以像如下这样使用 range() 来打印一系列数字:

    [root@kube list]# cat demo14.py 
    #coding:utf-8
    seq=[]
    for i in range(1,4):    #求1-3 的乘积
        vol=i**2
        seq.append(vol)
    print(seq)
    
    print('----------------------------')
    print(type([1,2,3,4]))     #range 的type 类型的转化
    print(type(range(1,5)))
    [root@kube list]# py demo14.py 
    [1, 4, 9]
    ----------------------------
    <class 'list'>
    <class 'range'>
    [root@kube list]# 

    python list 列表实现栈和队列

    队列和栈是两种数据结构,其内部都是按照固定顺序来存放变量的,二者的区别在于对数据的存取顺序:
    队列是,先存入的数据最先取出,即“先进先出”。
    栈是,最后存入的数据最先取出,即“后进先出”。

    考虑到 list 类型数据本身的存放就是有顺序的,而且内部元素又可以是各不相同的类型,非常适合用于队列和栈的实现。本节将演示如何使用 list 类型变量来实现队列和栈。

    python list 列表实现

    使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。
    [root@kube list]# cat demo15.py 
    #coding:utf-8
    
    #定义一个空列表,当做队列
    queue = []
    #向列表中插入元素
    queue.insert(0,"one")
    queue.insert(0,"two")
    queue.insert(0,"three")
    print(queue)
    print('取第一个元素:',queue.pop())       #pop() 默认取队列最后一位
    print('取第二个元素:',queue.pop())
    print('取第三个元素:',queue.pop())
    
    [root@kube list]# py demo15.py 
    ['three', 'two', 'one']
    取第一个元素: one
    取第二个元素: two
    取第三个元素: three
    [root@kube list]# 

    python  实现栈

    使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。
    [root@kube list]# cat demo16.py 
    #coding:utf-8
    
    #定义一个list 当栈
    stack = []
    stack.append('one')
    stack.append('two')
    stack.append('three')
    print(stack)
    print('取第一个元素:',stack.pop())
    print('取第二个元素:',stack.pop())
    print('取第三个元素:',stack.pop())
    [root@kube list]# py demo16.py 
    ['one', 'two', 'three']
    取第一个元素: three
    取第二个元素: two
    取第三个元素: one
    [root@kube list]# 

    collections模块实现栈和队列

    queueAndStack = deque()
    queueAndStack.append(1)
    queueAndStack.append(2)
    queueAndStack.append("hello")
    print(list(queueAndStack))
    #实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
    print(queueAndStack.popleft())
    #实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
    print(queueAndStack.pop())
    #再次打印列表
    print(list(queueAndStack))
  • 相关阅读:
    iOS 代码让手机震动一下
    iOS开发 --制作圆形的头像(UIImage)
    JAVA基本数据类型和引用数据类型的区别
    jquery基础
    JS基础
    JAVA异常详解
    单例模式详解及java常用类
    JAVA基础之字符串和面向对象
    我的第一篇博客 初识动画,飞机行小动画
    GCD系列:调度组(dispatch_group)
  • 原文地址:https://www.cnblogs.com/zy09/p/11585516.html
Copyright © 2011-2022 走看看