zoukankan      html  css  js  c++  java
  • Python学习-列表、元祖和Range

    记录一下元祖、列表和Range相关的知识。

    列表

    如果要表示多个事物,可以使用列表,它是一个容器型的数据类型,可以存储大量的数据,而且是任意类型的数据。对应java中就是数组,但是java数组的数据类型声明后必须一致,而python中列表的数据类型可以不一致。

    公共操作

    列表公共的操作方法可以参考字符串,也有如下操作方法。
    (1)len

    li=[1,2,'clyang',[1,2,3]]
    # len
    print(len(li)) # 4
    

    (2)索引

    可以使用索引来获取列表中的元素,索引下标从0开始算。从下面的结果可以看出,列表里可以有不同的数据类型。

    li=[1,2,'clyang',[1,2,3]]
    # 索引
    print(li[0],type(li[0])) # 1 <class 'int'>
    print(li[2],type(li[2])) # clyang <class 'str'>
    print(li[-1],type(li[-1])) # [1, 2, 3] <class 'list'>
    

    (3)切片

    列表的切片和字符串一样,也是顾头不顾尾。

    li=[1,2,'clyang',[1,2,3]]
    # 切片,一样是顾头不顾尾
    print(li[:2]) # [1, 2]
    # 从最后一个元素开始,步长-1来取
    print(li[-1::-1]) # [[1, 2, 3], 'clyang', 2, 1]
    print(li[-1:-2:-1]) # [[1, 2, 3]]
    print(li[-1:]) # [[1, 2, 3]]
    
    # 切片练习
    li=[1,3,2,"a",4,"b",5,"c"]
    # 切片形成新的列表[1,3,2]
    print(li[0:3])
    # 切片形成新的列表["a",4,"b"]
    print(li[3:6])
    # 切片形成新的列表[3,"a","b"]
    # 以下两种方式都可以,索引为6的元素和索引为-2的元素是同一个
    print(li[1:6:2])
    print(li[1:-2:2])
    # 切片形成新的列表["b","a",3]
    print(li[-3::-2])
    

    (4)for循环

    # for循环
    li=['messi','ronald','herry']
    for item in li:
        print(item)
        
    # 控制台
    messi
    ronald
    herry
    

    列表创建

    列中的创建有三种方式,有直接创建、使用list()创建、列表推导式。其中使用list()方法创建需保证传入的参数是可以迭代的。

    # 创建一个list
    # 方式1 直接创建
    li=[1,2,"messi",[1,2,3]]
    print(li) # [1, 2, 'messi', [1, 2, 3]]
    
    # 方式2 使用list()创建
    li2=list("messi") # 参数必须是可迭代的
    print(li2) # ['m', 'e', 's', 's', 'i']
    
    li3=list([1,2,"messi",[1,2,3]])
    print(li3) # [1, 2, 'messi', [1, 2, 3]]
    
    # 方式3 列表推导式
    li4=[x*3 for x in range(5)]
    print(li4) # [0, 3, 6, 9, 12]
    

    增删改查

    (1)增

    li=["messi","ronald"]
    # 1 append 追加
    li.append("herry")
    print(li) # ['messi', 'ronald', 'herry']
    
    # 列表的增,常见使用场景:人事输入人名,当按q或Q退出
    # while 1:
    #     name=input("请输入人名,按Q或q退出")
    #     if name.upper()=="Q":
    #         break
    #     li.append(name)
    #
    # print(li)
    
    # 2 insert 插入
    li.insert(2,"kaka")
    print(li) # ['messi', 'ronald', 'kaka', 'herry']
    
    # 3 extend 迭代追加
    li.extend(["zidane","gaolin"]) # 参数应该是可以迭代的
    print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin']
    # "abcd"可以迭代成a b c d
    li.extend("abcd")
    print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'd']
    

    (2)删

    注意如果是使用remove删除元素,并且列表中多个待删除的元素,则默认删除左边第一个。

    clear删除的话,是全部清空。

    del删除时,可以按照索引删除,也可以按照切片删除。

    # 数据是上面操作完后的数据
    li=['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'd']
    # 1 按照索引位置删除
    # 如果不指定索引号,默认删除最后一个元素
    li.pop()
    print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
    # 删除第一个元素,返回被删除的元素
    r=li.pop(0)
    print(r) # messi
    print(li) # ['ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
    # 2 按照元素删除,如果列表中有多个被删除的元素,删除左边第一个
    li.append("ronald")
    print(li) # ['ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'ronald']
    li.remove("ronald") # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'ronald']
    print(li)
    
    # 3 清空列表
    # li.clear()
    # print(li) # []
    
    # 4 使用del删除
    # 按索引删除
    del li[-1]
    print(li) # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
    # 按切片删除,顾头不顾尾
    del li[-1:-4:-1]
    print(li) # ['kaka', 'herry', 'zidane', 'gaolin']
    

    (3)改

    按照切片改。

    # 按照无步长的切片
    li=['kaka', 'herry', 'zidane', 'gaolin']
    # li[4:]='abc'
    # print(li) # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
    
    # 按有步长的切片改
    li[::2]="ab"
    # 步长为2来切,只有2个slice,如果是'abc'会形成三个序列,导致冲突
    # li[::2]="abc" # 报错 attempt to assign sequence of size 3 to extended slice of size 2
    print(li) # ['a', 'herry', 'b', 'gaolin']
    

    按照索引改。

    li=['kaka', 'herry', 'zidane', 'gaolin']
    li[0]="clyang"
    # 改完,第一个位置换成clyang
    print(li) # ['clyang', 'herry', 'zidane', 'gaolin']
    

    (4)查

    可以通过索引查、切片查、for循环查。

    # for循环查
    for item in li:
        print(item)
    # 控制台
    a
    herry
    b
    gaolin
    

    综合练习

    下面使用列表的知识,对列表进行操作练习,第二个练习就是列表嵌套列表,稍微复杂一点。

    #  练习1
    l1 = [1, 2, 'taibai', [1, 'alex', 3,]]
    # 1, 将l1中的'taibai'变成大写并放回原处。
    # print(l1[2])
    l1[2]=l1[2].upper()
    print(l1) # [1, 2, 'TAIBAI', [1, 'alex', 3]]
    # 2, 给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。
    l1[3].append('老男孩')
    print(l1) # [1, 2, 'TAIBAI', [1, 'alex', 3, '老男孩']]
    # 3, 将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
    print(l1[3][1]) # alex
    l1[3][1]=l1[3][1]+'sb'
    print(l1) # [1, 2, 'TAIBAI', [1, 'alexsb', 3, '老男孩']]
    
    # 练习2
    lis=[2,30,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']
    # 将列表中的tt变成大写
    lis[3][2][1][0]=lis[3][2][1][0].upper()
    lis[3][2][1][0]='TT'
    print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
    # 将列表中的数字3,变成字符串'100'
    # lis[3][2][1][1]='100'
    lis[3][2][1][1]=str(int(lis[3][2][1][1])+97)
    print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', '100', '1']], 89], 'ab', 'adv']
    # 将列表中的字符串1,变成数字101
    # lis[3][2][1][2]=101
    lis[3][2][1][2]=int(lis[3][2][1][2])+100
    print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', '100', 101]], 89], 'ab', 'adv']
    

    元祖

    元祖,可以存储大量数据,数据只能读,不能改。当不想让别人改动的一些数据,就存放在元祖里,如个人信息,用户名密码等。

    元祖可以使用切片、索引、for循环、拆包等。

    元祖中,对列表类型的元素是可以修改的,但是对int、bool、str这种不可变数据类型,既不能修改也不能删除。

    tu=(100,'messi',True,[1,2,3])
    # 通过索引获取
    print(tu[0]) # 100
    print(tu[1]) # messi
    # 切片
    print(tu[2:]) # (True, [1, 2, 3])
    
    print('----循环----')
    for i in tu:
        print(i)
        
    # 控制台    
    ----循环----
    100
    messi
    True
    [1, 2, 3]    
    
    # 查看长度
    print(len(tu)) # 4
    
    # 元素不可以改,但是元祖里的数组可以改
    tu[-1].append(8848)
    print(tu) # (100, 'messi', True, [1, 2, 3, 8848])
    
    # 修改元祖
    # tu[2]=False  # 不能修改
    print(tu)
    
    # 删除元祖
    # del tu[0] # 不能删除
    print(tu)
    
    # 元祖的拆包,分别赋值
    a,b=(1,2)
    print(a,b) # 1 2
    
    c=a,b
    print(c) # (1, 2)
    
    

    Range

    Range可以表示一定范围的数字,顾头不顾尾,并且可以指定步长。

    (1)创建Range。

    r = range(10)
    print(r)
    
    # 控制台
    range(0, 10)
    

    (2)循环打印,打印结果看出为"前包括后不包括"。

    r = range(10)
    for i in r:
        print(i)
        
    # 控制台    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    (3)可以使用索引。

    print(r[0]) # 0
    

    (4)Range可以指定步长。

    # 打印50-1
    for i in range(50, 0, -1):
        print(i)
    # 打印50之内的偶数
    print('打印之内的偶数')
    for i in range(0, 50, 2):
        print(i)
    

    (5)利用for循环+range+len,打印列表中所有的索引。

    li = [1, 2, 3, 'alex', '太白', 'messi', 1, 2, 3]
    # 这个方法常用
    for index in range(len(li)):
        print(index)
    

    (6)经典面试题

    Range切片后还是Range。

    # 经典面试题
    r = range(5)
    print(r[1:3])  # range(1,3),而不是1,2
    
    # 打印不出结果
    for i in range(1, 5, -1):
        print(i) 
    

    以上,是对列表、元祖和Range的记录,后续查看用。

    参考博文:

    (1)https://blog.csdn.net/u014612521/article/details/100159907

  • 相关阅读:
    hdu 1116 Play on Words
    hdu 1856 More is better
    跟随鼠标跑
    asp.net实现数据流文件下载
    在ASP.NET程序中集成更好的下载体验
    request.ContentType的可取值
    multipart formdata boundary 说明
    ASP.NET中实现多文件上传(普通)
    读取XML文件中的某个节点的某个属性
    获取请求的Headers部分
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/12505956.html
Copyright © 2011-2022 走看看