zoukankan      html  css  js  c++  java
  • Python-数据类型之列表

    列表和元祖都属于序列类型,该序列内可以包含任意数据类型,且数据存储是有序的,索引从0到1 

    一:列表概述

    1.1  如何定义一个列表

    中括号,已逗号为分割符,可以放任意的数据类型,甚至是对象。

    li = ['wangys','lala',123,[1,2,3],{'name':'wangys'}]
    # 列表也可以嵌套
    l2 = [['a','b'],[1,2],[]]

     

    1.1.2  取单个元素,取出的是原数据类型

    li = ['wangys','lala',123,[1,2,3],{'name':'wangys'}]
    l1=li[0]
    print(l1,type(l1))
    l2=li[2]
    print(l2,type(l2))
    l3=li[3]
    print(l3,type(l3))

    1.1.2  取多个元素,取出的是列表类型

    li = ['wangys','lala',123,[1,2,3],{'name':'wangys'}]
    l4=li[0:2]
    print(l4,type(l4))

    二、  列表操作之-查

    2.1   根据索引查找元素

    索引是指元素在列表的位置顺序,从0开始,最有一个元素为长度-1

    l = ['wangys',18,'male','IT']
    print(l[0])  # 查看列表第一个元素即索引为0的元素
    print(l[-1]) # 查看列表最后一个元素即索引为-1的元素
    print(l[-2]) # 查看列表倒数第二个元素,即索引为-2的元素

    结果如下:

     wangys
     IT
     male

    如果索引过界,则会报错,并且后面的代码不会执行

    l = ['wangys',18,'male','IT']
    print(l[4] # 查看列表第5个元素,即索引为4的元素,索引过界,导致错误
    
    结果如下:
    IndexError: list index out of range

    2.2  列表分片查找元素

    • 列表分片其实得到了一个子列表
    • 顾首不顾尾
    l = ['wangys',18,'male','IT']
    print(l[1:3])  # 取列表第二个(索引为1)到第三个元素(索引为2),但顾首不顾尾,所以取最后索引+1
    # [18, 'male']

    # 如果结束索引要早于开始索引,会产生一个空列表

    l = ['wangys',18,'male','IT']
    print(l[3:1])
    print(l[-2:1])
    
    []
    []

    # 省略开始索引,从第一个元素开始取值

    l = ['wangys',18,'male','IT']
    print(l[:2])
    # ['wangys', 18]

    # 省略结束索引,取到最后一个元素

    l = ['wangys',18,'male','IT']
    print(l[1:])
    [18, 'male', 'IT']

    # 开始索引和结束索引都省略,则复制整个列表

    l = ['wangys',18,'male','IT']
    print(l[:])

    # 设置步长

    默认步长为1,开始索引,结束索引,步长使用冒号分隔

    l = [1,2,3,4,5,6,7,8,9,10]
    print(l[1:9:2])
    # [2, 4, 6, 8]

    # 步长不能为0.如果为0,则报错

    l = [1,2,3,4,5,6,7,8,9,10]
    print(l[1:9:0])
    # ValueError: slice step cannot be zero

    # 如果步长为负数,那么开始索引要比结束索引要大

    l = [1,2,3,4,5,6,7,8,9,10]
    print(l[6:9:-2]) # 开始索引>结束索引,返回一个空列表
    print(l[9:6:-2]) # 开始索引要大于结束索引
    
    []
    [10, 8]

    2.3   检查某个元素是否是列表元素

    使用in关键字,如果在列表种返回True,不在返回False

    info = ['wangys',18,'male']
    
    print('wangys' in info)
    print('female' in info)
    True
    False
    account = [
        ['wangys','123456'],
        ['wc','123456'],
        ['xc','hello']
    ]
    
    username = input('请输入用户名:')
    password = input('请输入密码:')
    
    if [username,password] in account:
        print('登录成功')
    else:
        print('登录失败')
    
    请输入用户名:wangys
    请输入密码:123456
    登录成功

    2.4 查看列表中某个元素出现的个数

    num = [1,2,3,1,2,4]
    CountOf1=num.count(1)
    print(CountOf1)

    2.5 查看元素索引

    • 如果元素不存在报错
    wangys_info = ["wangys",23,'male']
    print(wangys_info.index('male'))
    # 2
    print(wangys_info.index('malea'))
    # ValueError: 'malea' is not in list

    三、列表操作之-增

    3.1 append 

    • 在末尾相加
    • 一次只增加一个元素,无论要append的是单个元素还是一个列表
    li = ['wangys','gongzhu']
    li.append('caomei')
    li.append('1')
    print(li)

    # 需求: 员工列表,往员工列表里添加员工,可以持续添加,当输入q时退出

    people = ['wangys','huisz']
    flag = True
    while flag:
    add_people = input("请输入员工姓名:").strip()
    if add_people.upper() == 'Q':
    flag = False
    else:
    people.append(add_people)
    print(people)

    # append的列表,会将该列表作为一个元素append

    num = [1,2,3,4,5]
    num.append([6,7])
    print(num)
    
    # [1, 2, 3, 4, 5, [6, 7]]

    # 可以使用extend方法
    num = [1,2,3,4,5]
    num.extend([6,7])
    print(num)
    # [1, 2, 3, 4, 5, 6, 7]

    3.2 insert 按照索引进行插入

    name = ['wangys','chaoyf']
    name.insert(1,'huisz')
    print(name)

    # ['wangys', 'huisz', 'chaoyf']

    3. 3 extend 

    • 和相加类似,但相加产生了一个新的列表,二extend是修改原列表
    • extend 将可迭代对象插入到列表的末尾,插入的是可迭代对象的每个元素

    整型是不可迭代对象

    name = ['wangys','chaoyf']
    name.extend('lala')
    print(name)
    # ['wangys', 'chaoyf', 'l', 'a', 'l', 'a']
    name.extend([1,2,3]) print(name)

    # ['wangys', 'chaoyf', 'l', 'a', 'l', 'a', 1, 2, 3]

    四、列表操作之-删

    4.1 pop 

    • pop 有返回值,该返回值是被删除的数据
    • 按索引删除
    • 不指定索引,把最后一个元素删除
    • 如果指定的索引不存在则报错 
    name = ['wangys','lala']
    delete_name = name.pop()
    print(delete_name,name)
    # lala ['wangys']
    name = ["wangys","haha"] name.pop(0) print(name)
    # ['haha']
    name = ["wangys","hehe"] print(name.pop())
    # hehe

     

    # 索引不存在,报错
    num1 = [1,2,3,4]
    num1.pop(6)
    print(num1)
    # IndexError: pop index out of range

    4.2 按照元素去删除

    • 默认删除匹配到的第一个元素
    • 如果元素不存在,则报错
    name = ['wangys','dede']
    name.remove('dede')
    print(name)
    # ['wangys']
    nums = [1,2,3,4,5,6,3]
    nums.remove(3)  删除列表中第一次匹配到的3元素
    print(nums)
    
    # [1, 2, 4, 5, 6, 3] # 可以看到确实是删除了,但后面的3没有删除
    # 如果元素不存在,则报错
    num1 = [1,2,3,4]
    num1.remove('wangys')
    print(num1)
    # ValueError: list.remove(x): x not in list

    4.3 清空列表

    name = ["wangys","dsad"]
    name.clear()
    print(name)
    # []

    3.5.4 删除列表

    name = ['wangys']
    del name
    print(name)

    3.5.5 切片删除

    name = ['wangys',"lala",'haha']
    del name[1:]
    print(name)

     

    五、列表操作之-改

    5.1 通过索引对列表进行修改

    • 索引过界会报错

    ·

    wangys_info = ["wangys",23,'male']
    wangys_info[0] = 'wc' # 修改列表第一个元素
    print(wangys_info)
    # ['wc', 23, 'male']
    
    
    # 如果索引越界,则会报错
    wangys_info = ["wangys",23,'male']
    wangys_info[5] = 'wc'
    print(wangys_info)
    
    # IndexError: list assignment index out of range

    5.2 分片字列表修改

    • 新旧子列表元素个数可以不相等
    # 新旧字列表元素个数不相等
    wangys_info = ["wangys",23,'male']
    wangys_info[:2] = ['wc','18','IT']
    print(wangys_info)
    # ['wc', '18', 'IT', 'male']
    
    # 新子列表是一个空列表
    wangys_info = ["wangys",23,'male']
    wangys_info[:2] = []
    print(wangys_info)
    # ['male']

    六、列表其他操作

     

    6.1 列表相加

    • 列表相加生成了一个新的列表,效率比较低,不建议使用
    • 可以使用extend方法将两个列表合并。

    将两个列表合并

    l1 = [1,2,3]
    l2 = ['hello','world']
    print(l1+l2)
    # [1, 2, 3, 'hello', 'world']

    6.2 列表乘法

    l = ['wangys']
    print(l*3)
    ['wangys', 'wangys', 'wangys']

    6.3 len,max,min 在列表中的用法

    • len 返回列表的长度,元素个数
    • max,返回列表内元素的最大值
    • min,返回列表内元素的最小值
    • 使用max,min函数时列表中的元素必须具有可比较性,如果没有(比如,不同数据类型)则会报错
    nums = [1,2,3]
    print(max(nums))
    print(min(nums))
    3
    1
    
    info = ['wangys',18,'male']
    print(len(info))
    print(max(info))
    print(min(info))
    3
    # TypeError: '>' not supported between instances of 'int' and 'str'

    6.4 列表与其他数据类型的转换

    6.4.1 str-list

    使用list方法

    name = 'wangys'
    l = list(name)
    print(l)
    # ['w', 'a', 'n', 'g', 'y', 's']

    6.5 排序

    • sort 会对原列表直接修改,如果是sorted函数会生成一个新的列表
    • 对列表进行排序时,列表中的元素必须是可比较的,如果不可比较,则报错

    正向排序

    num = [3,6,2,5,4]
    num.sort()
    print(num)
    # [2, 3, 4, 5, 6]

    反向排序

    num = [3,6,2,5,4]
    num.sort(reverse=True)
    print(num)
    # [6, 5, 4, 3, 2]

    # 数据类型不一致,导致排序报错

    info = ['wangys',18,'male']
    info.sort()
    print(info)
    # TypeError: '<' not supported between instances of 'int' and 'str'

    # sort和sorted

    nums = [1,2,3,4,5]
    nums.sort(reverse=True)
    print(nums)
    # [5, 4, 3, 2, 1]
    
    nums = [1,2,3,4,5]
    new_nums=sorted(nums,reverse=True)
    print(nums,new_nums)
    # [1, 2, 3, 4, 5] [5, 4, 3, 2, 1]

    6.6 列表反转

    num = [3,6,2,5,4]
    num.reverse()
    print(num)
    # [4, 5, 2, 6, 3]

    6.7  列表复制

    • 生成了一个新的列表
    num1 = [1,2,3,4]
    num2 = num1.copy()
    print(id(num1),id(num2))
    # id不一样,说明不是同一个列表,做了复制
    # 2185254579656 2185254596744

    6.8 列表嵌套

    wangys_info = ['wangys',23,'male',['sing','play',22],25]

    取出wangys里的a

    wangys_info = ['wangys',23,'male',['sing','play',22],25]
    print(wangys_info[0][1])

    将列表的第一个元素大写并替换之前的元素

    wangys_info = ['wangys',23,'male',['sing','play',22],25]
    wangys_info[0] = wangys_info[0].capitalize()
    print(wangys_info)

    将王诚替换为王永胜

    wangys_info = ['wangys',23,'王诚',['sing','play',22],25]
    wangys_info[2] = wangys_info[2].replace('诚','永胜')
    print(wangys_info)
    wangys_info = ['wangys',23,'王诚',['sing','play',22],25]
    wangys_info[3][1] = wangys_info[3][1].upper()
    print(wangys_info)

     七、列表推导式

    # 将name字符串的每个字符转换为ACII码
    # 普通方法
    name = 'wangys'
    l = []
    for  i in name:
        l.append(ord(i))
    print(l)
    # 列表推导式方法
    l =[ord(i) for i in name]
    print(l)

    八: For循环

    • 列表是可迭代对象,可以for循环去除列表的数据
    • for循环列表的过程中,如果做删除操作,不安全

    8.2  正确删除列表中元素的方式

    直接删除会有问题

    # 直接删除,会出问题
    lst = ['张国荣','张三','张大千','李世民'] for el in lst: if el.startswith(''): lst.remove(el) print(lst) # ['张三', '李世民']

    正确做法,将要删除的元素刷选到新列表,循环新列表,删除旧列表

    lst = ['张国荣','张三','张大千','李世民']
    new_list = []
    for el in lst:
        if el.startswith(''):
            new_list.append(el)
    
    for el in new_list:
        lst.remove(el)
    print(lst)

    其他方法

    将列表二元组转换为字典

    a = [('a','b')]
    b = [('c','d')]
    print(dict(a+b)) # {'a': 'b', 'c': 'd'}
  • 相关阅读:
    selenium2截图ScreenShot的使用
    selenium2断言类Assert的使用
    selenium2中的TestNg注解和数据驱动的简介及使用
    bash函数定义/使用/传参…
    bash字符串操作
    bash数组操作-定义/初始化/赋值…
    bash实例-参数/函数/统计IP
    01.AutoMapper 之约定(Conventions)
    00.AutoMapper 之入门指南(Getting Started Guide)
    AutoMapper
  • 原文地址:https://www.cnblogs.com/wc89/p/10416246.html
Copyright © 2011-2022 走看看