python 1.7 列表

数据结构-- 列表

1、什么是列表?为什么用列表?

引子

需求 变量现在能保存一个字符串,
name = "stone"
现在我要保存 整个班级的名字 怎么保存那?
name = "张三 李四 王五"
现在是把姓名保存了,但是 一个字符串是不能分割的
( 有字符串的高级使用方法,但是 姓名可能有3个字 有2个字 ,没有确定的分隔符,也很困难)

如何 用一个变量保存 多个值,并且按照一定的规则存取出来,引用出今天的主题 列表

作用 ,可以按照顺序存入多个不同类型的数值,也可以按照顺序或索引的取出来的 (可变 有序的数据类型)

l = ["张三","李四",111,333,[333,4444]] 
        0     1     2   3      4  这个叫做索引对应值 ,也就是值所对应的索引位置,从0 开始 N 结束
        

2、怎么用列表

创建列表
l = ["1",2]  # 使用中括号

列表的独有功能

列表的方法 查
  • 打印整个列表

     变量怎么取值 ,打印变量名
     aa = "dangj"
     print(aa)
     
     怎么取列表里的值 ??也是打印变量名
     print(aa) # 取出了变量l 的所有值 
    
  • 判断一个元素是否在列表内 in (效率特别低 尽量不用)

    l = ["张三","李四",111,333,[333,4444]]
    
    print(2222 in l)
    print(l.index(111))
    
    
  • 根据索引值取值 取出第一个值

    # l = ["张三","李四",111,333,[333,4444]]
    #
    # print(l[0])
    
  • 根据索引值取值 取出最后一个值

    #l = ["张三","李四",111,333,[333,4444]]
    # print(l[-1])
    
    # # 根据索引值取值 取出子列表的最后一个
    # print(l[-1][-1])
    
  • 根据元素取 索引值

    # 根据数值的查找索引值,使用index  要先判断是不是在列表内,不在会报错
    
    names = ["li","wang","zhang","wu","qi","hu"]
    
    names.index("hu") 
    
    
    #
    
  • 获取列表内有多少元素

    names = ["li","wang","zhang","wu","qi"]
    i =0
    while names:
        names.pop(0)
        i +=1
    print(i)
    
列表的方法 增
  • 顺序追加进去 append

    names = ["li","wang","zhang","wu","qi"]
    names.append("zhao")
    
    
    # 练习题
    print("欢迎进入游戏".center(60,"#"))
    while True:
    
        people_num = input("请输入游戏人数:")
        if people_num.isdecimal():
           break
        else:
            print("请输入正确的数字!")
    
    print(f"{people_num}个人参加Python游戏")
    
    user_list =[]
    
    for item  in range(1,int(people_num)+1):
        user = input(f"请输入玩家的姓名 {item}/{people_num}")
        user_list.append(user)
    
    print(user_list)
    
  • 批量追加 extend

      names.extend(names2)
      # extend 就是把另外一个列表中的值,全部插入到自己列表内,顺序插入。
      # 另外一个列表的值不会丢失
      print(names,names2)
      #结果:
       ['i', 'wang', 'zhang', 'Lu', '%%qi', 'hu', '11hu', 1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
    
    a = ["zhangsan","lisi","wangwu"]
    b = ["aaaa","bbbb","ccccc",]
    a.extend(b)
    print(a)
    ['zhangsan', 'lisi', 'wangwu', 'aaaa', 'bbbb', 'ccccc']
    
    for循环实现
    a = ["zhangsan", "lisi", "wangwu"]
    b = ["aaaa", "bbbb", "ccccc"]
    for  item in b:
        a.append(item)
    print(a)
    
  • 插入列表的任意位置

    names.insert(2,"zhangsan")  # 2号索引的位置 ,放入张三,原来的值,依次后退
    
    names = ["li","wang","zhang","wu","qi"]
    names.insert(2,"dang") # 想增加到哪个位置,就要先写位置的下标。
    print(names)  
    ['li', 'wang', 'dang', 'zhang', 'wu', 'qi']
    
    
    注意事项  :  names.insert(2,"zhangsan")   
                 当插入的索引值小于0 的时候, 那么插入的位置,就是0.  比如   names.insert(-1000,"zhangsan")
                 当插入的索引值大于最大的索引数 的时候, 那么插入的位置,就是列表的最后. names.insert(1000,"zhangsan")
    
    
  • 练习题 抢火车票,设置vip 用户

    vip_user = ["张三","李四","王五","陈六"]
    
    print("欢迎进入高铁购票系统".center(70,"#"))
    
    total_user = []
    while True:
    
        name = input("请输入购票人姓名: (退出请按Q/q)")
    
        if name.upper() =="Q":
            break
    
        if name.startswith('张') :
            total_user.insert(1, name)
            print(f"尊贵VIP会员{name}先生,前方排队还有{total_user.index(name)}人!")
        else:
            total_user.append(name)
            print(f"{name}先生,前方排队还有{total_user.index(name)}人!,建议升级VIP")
    
    # 使用in 判断        
            
    vip_user = ["张三","李四","王五","陈六"]
    
    print("欢迎进入高铁购票系统".center(70,"#"))
    
    total_user = []
    while True:
    
        name = input("请输入购票人姓名: (退出请按Q/q)")
    
        if name.upper() =="Q":
            break
    
        if name in vip_user :
            total_user.insert(1, name)
            print(f"尊贵VIP会员{name}先生,前方排队还有{total_user.index(name)}人!")
            print(total_user)
        else:
            total_user.append(name)
            print(f"{name}先生,前方排队还有{total_user.index(name)}人!,建议升级VIP")
    
    
    names = ["li","wang","zhang","wu","qi"]
    
    '''
    想要把liu插入一个zhang的后面,怎么写?
    就要先知道,zhang 在哪个下标,所以在zhang 的下标数
    加一就是zhang 的 后面   
    '''
    names.insert(3,"liu")
    
列表的方法 改
names = ["li", "wang", "zhang", "wu", "qi"]

names[0]= 123

print(names)

[123, 'wang', 'zhang', 'wu', 'qi']
列表的方法 删
  • 删除值

    (1)删除方法  根据的值, 没有的会报错
    
      names = ["li","wang","zhang","wu","qi"]
    # 想要删除一个值,使用remove ,直接写入要删除内容
    names.remove("wang")
    
    print(names)
    
    练习题  抽奖
    
    import random
    
    vip_user = ["苹果","李子","香蕉","橘子"]
    while vip_user:
        item = random.choice(vip_user)
        name = input("输入你的名字: ").strip()
        print(f"恭喜{name} 抽中 {item}!")
        vip_user.remove(item)
    
     
    
  • 删除索引位置 pop

    names = ["li","wang","zhang","wu","qi"]
    
    # pop 的语法 是默认删除最后一个 ,
    names = ["li","wang","zhang","wu","qi"]
    names.pop()
    print(names)
    ['li', 'wang', 'zhang', 'wu']
    
    # pop 的语法 如果参数加上索引位置删除,删除后返回值是要删除的元素,
    names = ["li","wang","zhang","wu","qi"]
    print(names.pop(1))
    print(names)
    wang
    ['li', 'zhang', 'wu', 'qi']
    
    
    (2)删除方法 根据的索引值
    # 想要删除一个值,del 删除 列表names的下标
    del names[1]
    names = ["li","wang","zhang","wu","qi"]
    del names[0]
    print(names)
    
    
    
    # 练习题:   6 个人 ,4张票,随机获取
    
    import random
    import time
    
    print("欢迎进入高铁购票系统".center(70,"#"))
    
    user_list= []
    
    while True:
    
        choic = input("请输入购票的人员名单:(退出请按Q/q)")
        if choic.upper() =="Q":
            break
        else:
            user_list.append(choic)
    print(user_list)
    
    ticket_num = 4
    # 票数可以设置 人数减1 ,始终有一人抢不到
    
    for item in range(0,ticket_num):
    
        name = user_list.pop()
         # 此次设置公平性,使用random.choic
        time.sleep(1)
        print(f"抢票中,请等待")
        print(f"恭喜 {name} 抢到票一张")
    
    people = "".join(user_list)
    if people:
        print(f"很遗憾,{people}未能抢到票,请选择其他车次!")
    
    
    
  • 清空列表

    names.clear
    
    
    
  • 关键字删除

    names = ["li","wang","zhang","wu","qi"]
    del  names[1]
    
    # 
    
列表数据的排序 、统计、合并
  • 倒序排列 翻转的意思

    names = ["li","wang","zhang","wu","qi","hu","hu"]
    
    names.reverse()  # 倒序排列 从倒数第一 变成 正数第一
    
    print(names)
    

    sort大小比较的原理 根据unicode 编码进行比较的

    v = "中"
    print(ord(v)) # 获取道字符串的Unicode的编码号 在编码表上一般是16进制表示
    print(hex(ord(v))) # 转换成16进制 就可以 在编码表上查找了
    4e2d
    
    
    # 两个字符串比较  是每个字符从都要编码,然后逐个比较,谁小谁就在前面
    比如 1  2   3  5  6
         a  b   c  
        
    
  • 大小排序

    names = ["1","2","3","4"]
    
    names.sort()# 从小到大
    
    names.sort(reverse)# 从大到小  
    
    
  • 字符串 (字母 + 数字大小比较)

    names = ["li","wang","zhang","wu","qi","hu","123"]
    names.sort()# 从小到大
    
    str int 不能比较
    

公共功能

  • 列表相加 相乘

     names = ["i","wang","zhang","Lu","%%qi","hu","11hu"]
      names2 = [1,2,3,4,5]
      name3 = names + names2
        
        
        
    names1 = [1,2,3,4,5]
    names2 = names * 2
    
  • 获取列表长度 #获取列表的元素数量#

    names2 = [1, 2, 3, 4, 5]
    
    print(len(names2))
    
    元素数量(1-X)和索引数(0-x)不同 
    
  • 索引改数据

    names2 = [1, 2, 3, 4, 5]
    names2[1]=10
    
  • 切片 取值 或者改值 类似解压赋值 (多个元素的操作用切片)

    names = ["i","wang","zhang","Lu",["66","66"],"%%qi","hu","11hu"]
    print(names[0:-1:2])
    # 可以简写成
    print(names[:-1:2])
    # 再简写
    print(names[::2])
    # 打印全部值 --不要这么干
    print(names[:])
    # 打印全部值
    print(names)
    
    查
    #print(names[0:3])  # 取前三个的时候 顾头不顾尾
    
    names = ["li","wang","zhang","wu","qi"]
    
    print(names[:3]) # 如果是从0开始取值的话,也可以不写
    
    #print(names[2:3])   # 取中间的值 记住顾头不顾尾
    
    # 切片 取列表后面的值
    
    # print(names[-1]) # 取最后一个值得写法
    # print(names[-2]) # 取倒数第二个值得写法
    # print(names[-2:]) # 取倒数第二个到最后的值得写法
    # print(names[-2:])  不管怎么取值 ,都是从左到右的顺序
    
    增
    
    改     追加
    
    切片范围列表的左侧
    names = ["li","wang","zhang","wu","qi"]
    names[0:3]=['123','123','666']
    print(names)
    ['123', '123', '666', 'wu', 'qi']
    
    
    切片范围列表的左侧  添加一个索引不存在的位置时 相当于追加到列表最前面
    names = ["li","wang","zhang","wu","qi"]
    names[-99:0]=['123','123','666']
    print(names)
    ['123', '123', '666', 'li', 'wang', 'zhang', 'wu', 'qi']
    
    names = ["li","wang","zhang","wu","qi"]  
    names[-99:]=['123','123','666']  #  相当于清空追加到列表最前面
    print(names)
    ['123', '123', '666']
    
    切片范围列表的右侧  添加一个索引不存在的位置时 相当于追加 在列表最后
    names = ["li","wang","zhang","wu","qi"]
    names[99:]=['123','123','666']
    
    print(names)
    ["li","wang","zhang","wu","qi",'123','123','666']
    
    
    删除 注意理解
    names = ["li","wang","zhang","wu","qi"]
    del  names[0:-1]
    print(names)
    ['qi']
    
    
  • 步长

    
    names = ["li","wang","zhang","wu","qi"]
    
    print(names[1:4:2])
    ['wang', 'wu']
    
    print(names[0::2])
    ['li', 'zhang', 'qi']
    
    print(names[4:1:-1])
    ['qi', 'wu', 'zhang']
    
    
    
  • 面试题 列表翻转 字符串的翻转 考验类型可变 不可变的知识点

    names = ["li","wang","zhang","wu","qi"]
    names.reverse()
    print(names)
    ['qi', 'wu', 'zhang', 'wang', 'li']
    # 把原来的列表的数据翻转了
    
    print(names[::-1])
    ['qi', 'wu', 'zhang', 'wang', 'li']
    # 重新生成了一个新的变量
    
    3、pop 删除最后一个 ,插入 新表第一个
    
    4、for range len() 倒取索引, 和字符串第一二方法一样
    
    
    字符串的翻转
    print(a[::-1])
    
    item = len(a)-1
    while item >= 0:
        value =a[item]
        print(value)
        item = item -1
    
    
  • for 循环取值

    根据 列表的长度取值
    names = ["1","大王","大庆","大定","qi","大号"]
    
    for item in names:
        
        print(item)
        
    根据 列表的索引取值
    names = ["1","大王","大庆","大定","qi","大号"]
    
    for item in range(0,len(names)):
    
        print(names[item])
    
    
    
    • 面试题 for 循环删除列表中的值 翻转删除

      需求: 删除以 有大的元素
      
      names = ["1","大王","大庆","大定","qi","大号"]
      
      for  item  in names:
      
          if item.startswith("大"):
              names.remove(item)
      
      print(names)
      ['1', '大庆', 'qi']  # 没有删除干净
      
      
      ======================================================
      
      names = ["f0", "大1", "大2", "大3", "q4", "大5"]
      
      '''
      # "1", "大王", "大庆", "大定", "qi", "大号"
      #  0     1       2      3      4     5
      
      # range (第三个 -1 翻转的意思,不是从前往后了,而是从后往前,挨个取值)
      # range (第二个 -1 因为切片,顾头不顾尾,所以0 号索引往后移一位到-1,就能取到0号索引了)
      # range (第一个 len(names)-1  获取列表的最大索引值 )
      # 解释 从前到后取值的话,删除一个元素,那么后面所有的元素,索引值加1 ,本来下一次循环到索引值是2,但是删掉了1 ,那么2就变成了1
      # 取到2 未删除之前的3,那么2就被忽略了。 从后往前删的话,删除的索引值,不会对前面的索引元素造成影响,只影响已对比过元素索引改变而已。
      '''
      
      for item in range(len(names)-1,-1,-1):
          if names[item].startswith("大"):
              del names[item]
      
      
      print(names)
      ['f0', 'q4']
      
      
      
      

转换

  • int 不能转列表

  • bool 不能转列表

  • str -> 列表, 字符串的每个元素 对应列表的 元素

  • 元组 集合

    v1 = (1,2,3,4,5)
    print(list(v1)) 元组转列表
    
    v2 = {'1','2','3'} 集合转列表
    
    print(list(v2))
    
  • 统计列表中,重名有几个

    names = ["li","wang","zhang","wu","qi","hu","hu"]
    print(names.count("hu"))
    
    # count 是返回值出现的次数
    
  • 嵌套取值

    对于嵌套的值,可以根据之前学习的索引知识点来进行学习,例如:
    infos = [
        ["da",19,"boy"],
        ["jingjing",22,"gril"]
    ]
    
    print(infos[1][1])
    
    
    data = [ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝" ]
    
    print( data[0] ) # "谢广坤"
    print( data[1] ) # ["海燕","赵本山"]
    print( data[0][2] ) # "坤"
    print( data[1][-1] ) # "赵本山"
    
    data.append(666)
    print(data) # [ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝",666]
    
    data[1].append("谢大脚")
    print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],"宋小宝",666 ]
    
    
    del data[-2]
    print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],666 ]
    
    
    data[-2][1] = "alex"
    print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,"alex",33,44],666 ]
    
    
    data[1][0:2] = [999,666]
    print(data) # [ "谢广坤",[999,666,"谢大脚"],True,[11,"alex",33,44],666 ]
    ```
    
    ```python
    # 创建用户列表
    #    用户列表应该长: [ ["alex","123"],["eric","666"] ]
    
    # user_list = [["alex","123"],["eric","666"],]
    # user_list.append(["alex","123"])
    # user_list.append(["eric","666"])
    
    
    user_list = []
    while True:
        user = input("请输入用户名:")
        pwd = input("请输入密码:")
    
        data = []
        data.append(user)
        data.append(pwd)
        
        user_list.append(data)
    ```
    
    ```python
    user_list = []
    while True:
        user = input("请输入用户名(Q退出):")
        if user == "Q":
            break
        pwd = input("请输入密码:")
        data = [user,pwd]
        user_list.append(data)
    
    print(user_list)
    ```
    
    
    
    
    
(1)列表的复制(浅copy,深copy)的特性
names = ["i","wang","zhang","Lu","%%qi","hu","11hu"]
names2 = names.copy()
print(names2)
结果:

E:\python\venv\Scripts\python.exe E:/python/day2/hello.py

['i', 'wang', 'zhang', 'Lu', '%%qi', 'hu', '11hu']

特性: 浅copy 只复制列表的第一层

names = ["i","wang","zhang","Lu",["66","66"],"%%qi","hu","11hu"]
names2 = names.copy()
print (names)
print (names2)
names[3] = "xun"
names[4][0] = "77"
print (names)
print (names2)


结果

E:\python\venv\Scripts\python.exe E:/python/day2/hello.py

['i', 'wang', 'zhang', 'Lu', ['66', '66'], '%%qi', 'hu', '11hu']

['i', 'wang', 'zhang', 'Lu', ['66', '66'], '%%qi', 'hu', '11hu']

['i', 'wang', 'zhang', 'xun', ['77', '66'], '%%qi', 'hu', '11hu']

['i', 'wang', 'zhang', 'Lu', ['77', '66'], '%%qi', 'hu', '11hu']

复制的特性就是 在复制以后 更改了names ,names2 是不会改变的,但是嵌套的列表是在一段独立的内存空间,nams2的复制的是指向内存空间的地址,不是复制的数值,所以,names 的嵌套列表的值 发生变化,那么names2 的值也会发生变化。

实现浅copy的三种方法
import  copy
names=["i","wang","zhang","Lu",["66","66"],"%%qi","hu","11hu"]
p1 = copy.copy(names)
p2 = names[:]
p3 = list(names)
print(p1)
print(p2)
print(p3)

浅copy的案列

import  copy

person = ["lu",["saving","100"]]
p1 = copy.copy(person)
p2 = copy.copy(person)
p1[0] = "dang"
p2[0] = "zhang"
person[1][1] = "50"
print(p1)
print(p2)

浅copy 实现一个案例是, 
有两个人同时,拥有一个共同账户,那么,其中一个人取了50 元,那么,另外一个人的账户同时,也减掉了50元,也可以实现简单的数据一致性。



深copy
import  copy
names = ["i","wang","zhang","Lu",["66","66"],"%%qi","hu","11hu"]
names2 = copy.deepcopy(names)
print (names)
print (names2)
names[3] = "xun"
names[4][0] = "77"
print (names)
print (names2)

使复制的列表 完全一样。

作业

1.6 列表阶段作业

  1. 写代码,有如下列表,按照要求实现每一个功能。

    li = ["alex", "WuSir", "ritian", "barry", "武沛齐"]
    
    • 计算列表的长度并输出
    • 列表中追加元素"seven",并输出添加后的列表
    • 请在列表的第1个索引位置插入元素"Tony",并输出添加后的列表
    • 请修改列表第2个索引位置的元素为"Kelly",并输出修改后的列表
    • 请将列表的第3个位置的值改成 "妖怪",并输出修改后的列表
    • 请将列表 data=[1,"a",3,4,"heart"] 的每一个元素追加到列表 li 中,并输出添加后的列表
    • 请将字符串 s = "qwert"的每一个元素到列表 li 中。
    • 请删除列表中的元素"barry",并输出添加后的列表
    • 请删除列表中的第2个元素,并输出删除元素后的列表
    • 请删除列表中的第2至第4个元素,并输出删除元素后的列表
  • 答案

    li = ["alex", "WuSir", "ritian", "barry", "武沛齐"]
    
    - 计算列表的长度并输出
    print(len(li))
    
    i =0
    while li:
        li.pop()
        i +=1
    print(i)
    
    - 列表中追加元素"seven",并输出添加后的列表
    li.append("seven")
    print(li)
    
    li.insert(900,"seven")
    print(li)
    
    - 请在列表的第1个索引位置插入元素"Tony",并输出添加后的列表
    
    
    li.insert(1,"Tony")
    print(li)
    
    li[1]="Tony"
    print(li)
    
    - 请修改列表第2个索引位置的元素为"Kelly",并输出修改后的列表
    
    li[2]="kelly"
    print(li)
    
    - 请将列表的第3个位置的值改成 "妖怪",并输出修改后的列表
    
    li[2]="妖怪"
    print(li)
    
    - 请将列表 `data=[1,"a",3,4,"heart"]` 的每一个元素追加到列表 `li` 中,并输出添加后的列表
    data=[1,"a",3,4,"heart"]
    
    li = ["alex", "WuSir", "ritian", "barry", "武沛齐"]
    
    
    li += data
    print(li)
    
    while data:
        li.append(data.pop())
    print(li)
    
    for item in data:
        li.append(item)
    print(li)
    
    li.extend(data)
    print(li)
    
    
    - 请将字符串 s = "qwert"的每一个元素到列表 `li` 中。
    s = "qwert"
    li.extend(list(s))
    print(li)
    
    for item in s:
        li.append(item)
    print(li)
    
    num = len(s)-1
    while  num >=0:
        li.insert(99,s[num])
        num -= 1
    print(li)
    
    
    - 请删除列表中的元素"barry",并输出添加后的列表
    list_num = len(li)
    value = "barry"
    for item in range(list_num-1,-1,-1):
        if li[item] ==value:
            li.remove(li[item])
            li.pop(item)
            del li[item]
            li[item]=""
    
    print(li)
    
    
    value = "barry"
    if value in li:
        li.remove(value)
    print(li)
    
    value = "barry"
    if value in li:
        del li[li.index(value)]
    print(li)
    
    
    - 请删除列表中的第2个元素,并输出删除元素后的列表
    li = ["alex", "WuSir", "ritian", "barry", "武沛齐"]
    
    li.remove(li[1])
    print(li)
    
    del li[1:2]
    print(li)
    
    li.pop(1)
    print(li)
    
    del li[1]
    print(li)
    
    - 请删除列表中的第2至第4个元素,并输出删除元素后的列表
    li = ["alex", "WuSir", "ritian", "barry", "武沛齐"]
       ["alex",                             "武沛齐"]
    
    
    a = [li[0],li[4]]
    print(a)
    
    del li[1:4]
    print(li)
    
  1. 写代码,有如下列表,利用切片实现每一个功能

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    
    • 通过对li列表的切片形成新的列表 [1,3,2]
    • 通过对li列表的切片形成新的列表 ["a",4,"b"]
    • 通过对li列表的切片形成新的列表 [1,2,4,5]
    • 通过对li列表的切片形成新的列表 [3,"a","b"]
    • 通过对li列表的切片形成新的列表 [3,"a","b","c"]
    • 通过对li列表的切片形成新的列表 ["c"]
    • 通过对li列表的切片形成新的列表 ["b","a",3]
  • 答案

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    通过对li列表的切片形成新的列表 [1,3,2]
    print(li[:3])
    print(li[2::-1])
    
    
    通过对li列表的切片形成新的列表 ["a",4,"b"]
    
    print(li[3:6])
    print(li[-3:-6:-1])
    
    通过对li列表的切片形成新的列表 [1,2,4,5]
    步长2
    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    
    print(li[0::2])
    range 设置既有翻转还有步长
    for i in range(len(li)-1,-1,-1):
       print(li[i])
    
    通过对li列表的切片形成新的列表 [3,"a","b"]
    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(li[1:-1:2])
    
    
    
    通过对li列表的切片形成新的列表 [3,"a","b","c"]
    
    print(li[1::2])
    
    
    通过对li列表的切片形成新的列表 ["c"]
    print(li[-1])
    
    通过对li列表的切片形成新的列表 ["b","a",3]
    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(li[1:-2:2])
    
    

步长 的数字 和翻转- 没有关系
翻转含义 仅仅是从左 到右,还是从右到左,索引值没有变化,整数 和负数 都可以表示
range(len(list)-1,-1,-1) 第二个-1 表示的是0号索引左边的值

li = [1, 3, 2, "a", 4, "b", 5,"c"]
b a 3
print(li[-3:-8:-2])
print(li[5::-2])

步长 是使用 数字表示的
翻转 是使用 - 表示的

  1. 写代码,有如下列表,按照要求实现每一个功能。

    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    
    • 将列表lis中的第2个索引位置的值变成大写,并打印列表。
    • 将列表中的数字3变成字符串"100"
    • 将列表中的字符串"tt"变成数字 101
    • 在 "qwe"前面插入字符串:"火车头"
  • 答案

    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    - 将列表lis中的第2个索引位置的值变成大写,并打印列表。
    print(lis[2].upper())
    
    - 将列表中的数字3变成字符串"100"
    lis[1]="100"
    lis[3][2][1]="100"
    print(lis)
    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    - 将列表中的字符串"tt"变成数字 101
    lis[3][2][1][0]=11
    print(lis)
    
    - 在 "qwe"前面插入字符串:"火车头"
    
    lis[3][-99:0]= ["火车头"]
    
    lis[3].insert(0,"火车头")
    
    print(lis)
    
  • 答案

    请用代码实现循环输出元素和值:users = ["武大熊","景女神","肖大侠"] ,如:
    
    0 武沛齐
    1 景女神
    2 肖大侠
    users = ["武大熊","景女神","肖大侠"]
    
    for item in users:
        print(f"{users.index(item)} {item}")
    
    
    
    for item in range(len(users)-1,-1,-1):
        print(f"{users[item]} {item}")
        
        
    for item in range(len(users)):
    
        print(f"{item} {users[item]} ")
    
    写代码实现以下功能
    
    如有变量 goods = ['汽车','飞机','火箭'] 提示用户可供选择的商品:
    
    0,汽车
    1,飞机
    2,火箭
    
    用户输入索引后,将指定商品的内容拼接打印,如:用户输入0,则打印 您选择的商品是汽车。
    goods = ['汽车','飞机','火箭']
    
    for item in range(len(goods)):
        print(f"{item} {goods[item]}")
    
    chico  = input("请输入购买的产品的序号:(退出按Q/q)")
    
    if  chico.upper() == "Q":
        print("欢迎下次光临")
    if int(chico) == 0 or int(chico) == 1 or int(chico) == 2 :
        print(f"恭喜你购买成功{goods[item]}")
    else:
        print("输入错误请重新输入")
    
    
    利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并追加到一个列表。
    list = []
    for item in range(1,51):
        if item%3 == 0:
            list.append(item)
    print(list)
    
    
    
    
    利用for循环和range 找出 0 ~ 50 以内能被3整除的数,并插入到列表的第0个索引位置,最终结果如下:
    
    [48,45,42...]
    
    list = []
    for item in range(1,51):
        if item%3 == 0:
            list.insert(0,item)
    print(list)
    
    
    
    查找列表li中的元素,移除每个元素的空格,并找出以"a"开头,并添加到一个新列表中,最后循环打印这个新列表。
    
    li = ["alexC", "AbC ", "egon", " riTiAn", "WuSir", "  aqc"]
    new_list =[]
    for item in li:
        if item.strip().startswith("a"):
            new_list.append(item.strip())
    
    print(new_list)    
    
    
    将以下车牌中所有 京的车牌搞到一个列表中,并输出京牌车辆的数量。
    
    data = ["京1231", "冀8899", "京166631", "晋989"]
    jing = []
    for item in data:
        if item.startswith("京"):
            jing.insert(0,item)
    print(len(jing))
    
    
    
posted @ 2021-12-10 16:36  mmszxc  阅读(173)  评论(0)    收藏  举报