• 【4】python数据类型:列表/数组(list)


    Python内置的一种数据类型是列表:list。
    list是一种有序的集合,可以随时添加和删除其中的元素。通过下标访问列表中的元素(又称索引、角标),下标从0开始计数。
    list定义,使用中括号[]。

    list1 = [1,2,3,4] #一个普通的数组
    list2 = ['marry','lily',[50,'monkey']] #二维数组
    list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三维数组,嵌套几层就是几维

    1、list的增、删、改、查

    #
    name=['牛牛','帆帆','月月',666,'aaa',68.99]#定义一个list列表
    name.append('小月')# 默认在最后面添加元素
    print(name)
    name.insert(0,'小军')#指定下标位置添加元素
    print(name)
    
    执行结果如下:
    ['牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月']
    ['小军', '牛牛', '帆帆', '月月', 666, 'aaa', 68.99, '小月']
    
    
    #
    name=['牛牛','帆帆','月月',666,'aaa',68.99]#定义一个list列表
    print('修改之前:',name)
    name[0]='晓红'#指定下标0的元素修改成“晓红”
    print('修改之后:',name)
    
    执行结果如下:
    修改之前: ['牛牛', '帆帆', '月月', 666, 'aaa', 68.99]
    修改之后: ['晓红', '帆帆', '月月', 666, 'aaa', 68.99]
    
    
    #
    name=['牛牛','帆帆','月月',666,'aaa',68.99]#定义一个list列表
    print(name[0]) # 获取第一个元素
    print(name[-1]) # -1代表最后一个元素
    
    执行结果如下:
    牛牛
    68.99
    
    
    #
    name.remove('aaa') # 删除指定的值,如果有两个一样的,只会删除前面的
    del name[0] # 删除指定位置的值
    name.pop() # 不传入下标的话,删除最后一个值,传入下标删除指定位置的值
    name.clear() # 清空列表

    2、list其他常用操作方法

    name=['大牛','帆帆','月月',666,'aaa',68.99]#定义一个list列表
    name2 = [1, 2, 3, 4, ['hehe', 'haha']]
    
    
    print(len(name))#获取个数/长度
    print(name.index('帆帆')) # 取索引
    print(name.count('帆帆')) # 取帆帆出现的次数
    print(name*2)#乘法
    print(name+name2)#加法
    name.reverse() # 反转的写法之一
    name.sort(reverse=True)#反转写法之二
    name.extend(name2) # 扩展列表,也就是把name2的值加到name里面
    print("hello" in name)#检查成员

     3、切片

    切片也就是另一种方式获取列表的值,它可以获取多个元素,可以理解为,从第几个元素开始,到第几个元素结束,获取他们之间的值。
    格式是name:[0:6],意思说要获取name的第一个元素到第五个元素,切片是不包含后面那个元素的值的,记住顾头不顾尾。
    切片后面还有可以写一个参数,叫做步长,也就是每几个元素,取一次,切片操作也可以对字符串使用,和列表的用法一样。

    (1)列表切片

    l=list(range(1,11))#自动生成1-10的数,然后类型转换成列表list
    
    print(l)
    print(l[0:4])#顾头不顾尾,取下标0,1,2,3
    print(l[:5])#如果最前面没有写的话,代表从0开始取
    print(l[4:])#如果冒号后面没有写,代表取到最后
    print(l[:])
    print(l[0:8:2])#步长,每2个取一个
    print(l[::2])
    print(l[1::2])#打印1-10的所有偶数
    print(l[::2])#打印1-10的所有奇数
    print(l[::-2])#如果步长是负数,那么从右往左取值

    (2)多维数组的切片

    nums1=[1,2,3,[4,56]]
    nums2=[1,2,3,4,['a','b','c','d','e',['','','']],['','']] #三维数组
    print(nums1[3][1])#要取56
    print(nums2[4][5][1])#
    print(nums2[-1][-1])#

    (3)字符串切片

    for i in range(10):
        s=input('请输入一个字符串:')
        if len(s)<2:
            print('请输入大于2位的字符串')
        elif s==s[::-1]:
            print('是回文')
        else:
            print('不是回文')

    4、枚举函数

    enumerate()是python的内置函数,enumerate在字典上是枚举、列举的意思。
    对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
    enumerate多用于在for循环中得到计数。

    # i存的是下标
    for i,j in enumerate(('a','b','c')):
         print(i,j)
     
    pwd=['123','456','789']
    for index,p in enumerate(pwd):
        pwd[index] = 'abd_' + p
        print(pwd)

    5、小练习

    注册,校验用户是否存在,如果用户不存在就说明可以注册

    users=['大发','冰冰','111']
    for i in range(5):
        username=input('请输入用户名:')
        # if users.count(username)>0:
        if username in users: #以上两种方法都可以,in是判断在不在里面
            print('用户名已注册')
        else:
            print('用户未注册')
            users.append(username)#将用户名添加到列表中
            print(users)
            break
    else:
        print('输入次数过多')

    6、list循环

    我们来做一个小练习:使用循环去掉奇数,只留下偶数。


    (1)循环的错误方法

    # 错误方法举例:如果用下面何种方法去做,下标会错误,删除时会导致一些元素被跨过
    l=[1,1,1,2,3,4,5]
    
    for i in l:
        if i%2!=0:#取余不为0,说明是奇数
            l.remove(i)
    print(l)
    # [1, 2, 4]

    (2)循环的正确方法

    # 正确方法:复制一个list,循环l2,从l1里面删,这样就不会出错了,因为2的下标没有错乱
    l=[1,1,1,2,3,4,5]
    l2=[1,1,1,2,3,4,5]
    for i in l2:
        if i%2!=0:
            l.remove(i)
    print(l)
    # [2, 4]

    (3)深拷贝、浅拷贝
    当字符串很长很大的时候,直接手动复制list很费劲,那我们可以使用深拷贝的方法,下面我们看看深拷贝和浅拷贝的区别

    #浅拷贝,两个变量的内存地址是一样的,这种方法循环删除文件是不行的,会相互影响
    l=[1,1,1,2,3,4,5]
    l2=l
    l2=l.copy()
    
    # 深拷贝,是两个内存地址。复制一个list的意思
    import copy
    l2=copy.deepcopy(l)
    
    #打印内存地址看一下深拷贝后两个的内存地址是不是变啦
    print(id(l))
    print(id(l2))
  • 相关阅读:
    vue 组件的封装
    原生tab选项卡
    vue 登录验证码
    input type=”file“ change事件只执行一次的问题
    Java容器解析系列(13) WeakHashMap详解
    Java容器解析系列(12) LinkedHashMap 详解
    Java容器解析系列(11) HashMap 详解
    Java泛型之自限定类型
    java Reference
    Thread类源码解析
  • 原文地址:https://www.cnblogs.com/haifeima/p/9615038.html
Copyright © 2020-2023  润新知