04列表、元组、range模块

一、列表

  1. 什么是列表

    • 列表可以承载任意类型的数据,可以存储海量的数据
    • 列表时python常用的容器型数据类型
    • 列表是有序的,支持索引,支持切片
  2. 创建一个列表

    #定义一个空列表
    li=[]
    #定义一个有值的列表
    li=[100,200,'python',True,[1,2,3]]
    
  3. 列表的索引、切片、步长。列表中取出的数据类型不变

    li=[100,'python',True,[1,2,3]]
    
    #索引
    print(li[0],type(li[0]))
    print(li[1],type(li[1]))
    print(li[-1],type(li[-1]))
    # 结果如下100 <class 'int'>
    100 <class 'int'>
    python <class 'str'>
    [1, 2, 3] <class 'list'>
    
    #切片\步长(顾头不顾尾)
    print(li[:2:2])
    # 结果如下:
    [100]
    
  4. 练习

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    # 通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
    # 通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]
    # 通过对li列表的切片形成新的列表l4,l4 = [3,"a","b"]
    # 通过对li列表的切片形成新的列表l6,l6 = ["b","a",3]
    # 答案
    l1=li[:3]
    l2=li[3:6]
    l4=li[1:6:2]
    l6=li[-3:0:-2]
    
  5. 列表的增删改查

      • append(‘str'):在列表最后面增加元素,没有返回值。
      • insert(index,‘str’):在指定位置插入一个元素,没有返回值
      • extend(”abcd“):在最后一次添加a,b,c,d四个元素。迭代追加组成对象的最小元素。字符串最小元素是每个字符,列表自小元素就是列表中的每个单位。
      • 按照索引位置进行删除
        • pop():默认删除最后一个元素,也可以删除index所在位置的元素,并返回删除的元素
      • 按照指定元素进行删除
        • remove(“element”):删除列表中某个元素,默认删除列表中匹配到的第一个元素。
      • clear():清空列表中的所有元素
      • del 删除
        • 按照索引进行删除
          • del list[-1]
        • 按照切片、步长进行删除
          • del list[::2]
      • 按照索引位置进行修改
        • li[0]='new_element':直接把下标为0的元素修改成“new_elenment"
      • 按照切片进行修改(原数据的个数和现在的个数数量可以不一样)
        • li[:2]="abcd":把前三个元素修改成a,b,c,d。原来的第四个元素索引位置顺序向后移动。
      • 按照步长修改(原数据的个数和现在的个数数量要相同)
        • li[:3:2]='ab':把索引位置为0、2的元素修改为a,b
      • 列表是可迭代的,可以for进行遍历
    1. 其他用法

      • reverse():对列表进行反转

        #对l1列表进行反转并输出
        l1=[1,2,3,4,5]
        l2=l1[::-1]
        l1=l2
        print(l1)
        #结果为:
        [5,4,3,2,1]
        
        #可以直接用reverse方法直接实现
        l1=[1,2,3,4,5]
        l1.reverse()
        print(l1)
        #结果为:
        [5,4,3,2,1]
        
    2. 练习(有列表嵌套)

      l1 = [1, 2, 'taibai', [1, 'alex', 3]]
      '''
      1、将l1中的’taibai‘变成大写并放回原处
      2、给小列表[1,'alex',3]追加一个元素,’老男孩教育‘
      3、给列表中的’alex'通过字符串拼接的方式在列表中变成'alexsb'
      '''
      ##答案
      l1[2]=l1[2].upper()
      l1[3].append('老男孩教育')
      l1[3][1]=l1[3][1]+'sb'
      #l1[-1][1] += 'sb'
      print(l1)
      
      [1, 2, 'TAIBAI', [1, 'alexsb', 3, '老男孩教育']]
      
  6. 列表的嵌套

    • 列表中包含着列表。
  7. 练习题

    lis = [2, 30, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    # 将列表lis中的"tt"变成大写。
    # 将列表中的数字3变成字符串"100"。
    # 将列表中的字符串"1"变成数字101。
    lis[3][2][1][0]=lis[3][2][1][0].upper()
    lis[3][2][1][1]='100'
    lis[3][2][1][2]=101
    

二、元组

  1. 元组

    • 元组是只读列表

    • 可以存大量数据,支持索引、切片查看

    • 列表用[]表示,元组用()表示

    • 列表中可以只有一个元素,元组中如果只有一个元素,后面必须要加上一个","。

    • 元组中的列表可以进行增删改查操作,但是不能删除元组中的整个列表

    tup1=(1)
    tup2=(1,)
    print(tup1,type(tup1))
    print(tup2,type(tup2))
    
    1 <class 'int'>
    (1,) <class 'tuple'>
    
  2. 应用的地方

    • 可以存放重要数据。因为元组不可修改,所以可以用来存放:用户名、密码、个人信息等,一些不想让别人修改的东西

    • 元组的拆包。可以分别赋值。

      c = (1,2)
      #拆包的时候,等号两边的数值个数要一一对应。会把等号右边元组中的值,一一对应的赋值给等号左边的变量
      a,b=c   
      print(a,b)
      # 结果为:
      1 2
      

三、range

  1. range

    • 生成指定范围内的数字

    • range也是顾头不顾尾

    • 可以指定起始值,终止值,步长

    • range大部分与for结合使用

      #打印1到10,步长为2
      for i in range(1,11,2):
          print(i)
      # 结果如下:
      1
      3
      5
      7
      9
      
      #也可以倒序打印1-10
      for i in range(10,0,-1):
          print(i)
          
      10
      9
      8
      7
      6
      5
      4
      3
      2
      1
      
      
  2. 练习

    l1=[1,2,3,'python','学习']
    # 利用for虚幻,利用range将l1的所有索引依次打印出来
    
    for i in range(len(l1)):
        print(i,l1[i])
    
    # 结果如下:
    0 1
    1 2
    2 3
    3 python
    4 学习
    

四、总结练习

"""
14.有如下列表(选做题)
li = [1, 3, 4, "alex", [3, 7, 8, "BaoYuan"], 5, "RiTiAn"]
循环打印列表中的每个元素,遇到列表则再循环打印出它里面的元素。
我想要的结果是:
1
3
4
alex
3
7
8
baoyuan
5
ritian
"""

li = [1, 3, 4, "alex", [3, 7, 8, "BaoYuan"], 5, "RiTiAn"]
for i in li:
    if type(i) == list:
        for j in i:
            if type(j) == str:
                j=j.lower()
                print(j)
            else:
                print(j)
    elif type(i) == str:
        i=i.lower()
        print(i)
    else:

13.开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符:
敏感词列表 li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
则将用户输入的内容中的敏感词汇替换成等长度的*(苍老师就替换***),
并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中。
"""

li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
new_list=[]
while True:
    get_str=input("请输入评论,或者输入'q'退出程序:")
    if get_str.lower() == 'q':
        break
    for i in li:
        if i in get_str:
            get_str=get_str.replace(i,len(i)*"*")
    new_list.append(get_str)
print(new_list)

"""
# 查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,
# 并以"c"结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表。
# li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc"]
# """


new_li=[]
li = ["TaiBai ", "alexC", "AbC ", "egon", " riTiAn", "WuSir", " aqc"]
for i in li:
    string=i.replace(" ","")
    if string[0].upper()== "A" and string[-1] == "c":
        new_li.append(string)
print(new_li)

"""
11.利用for循环和range,将1-30的数字依次添加到一个列表中,
并循环这个列表,将能被3整除的数改成*。
"""

li=[]
for i in range(1,31):
    li.append(i)
for index,value in enumerate(li):
    if li[index] % 3 == 0:
        li[index]='*'

print(li)

"""
利用for循环和range打印100~10,倒序将所有的偶数添加到一个新列表中,
然后在对列表的元素进行筛选,将能被4整除的数留下来。
"""


li=[]
li_4=[]
for i in range(100,9,-1):
    if i % 2 == 0:
        li.append(i)
        if i % 4 == 0:
            li_4.append(i)
print(li,"\n",li_4)
posted @ 2021-03-01 22:31  majic_jie  阅读(81)  评论(0)    收藏  举报