python3基础06

day06

列表的in / not in运算符
  判断一个值是否存在于列表中,如果存在返回True,否则返回False
  同字符串的in 运算符
  用于检查一个值是否存在与列表中,如果存在返回True,否则返回False

示例:
   x = [1, 'Two', 3, '四']
   3 in x  # 返回 True
  '3' in x  # 返回 False
   10 in x  # False
   10 not in x  # True 

列表的索引操作
  语法:
    列表[整数表达式]
  用法:
    与字符串索引的用法相同(分为正向索引和反向索引)
  示例:
    x = [1,3,5,7]
    print(x[1])    # 3
    print(x[-1])   # 7

列表的索引赋值:
  列表时可变的,可以通过索引赋值改变列表中的元素
  语法:
    列表[整数表达式] = 表达式
  作用:
    改变列表中索引的绑定关系
  示例:
    x = [1,2,3,4]
    x[2] =3.14    # 改变了第三个元素的值
   

列表的切片
  列表[:]
  列表[::]
  列表的切片取值返回一个新的列表,规则等同于字符串切片规则
   
  示例:
    x = [1,2,3,4,5,6,7,8]
    x[::2]       #[1,3,5,7]
    y = [1::3]   #[2,5,8]

列表的切片赋值
  作用:
    可以改变元列表的数据排列,可以插入和修改数据
    可以用切片改变列表对应元素的值
  语法:
    列表[切片] = 可迭代对象
  说明:
    切片赋值的赋值运算符(=)的右侧必须是一个可迭代对象
   
  示例:
   # 切片赋值可以增加或减少原来的数据元素
   l = [2,3,4]
   l[0:1] = [1.1,2.2]       # l = [1.1, 2.2, 3,4]
   l[2:]=[3.3,4.4,5.5]      # l = [1.1, 2.2, 3.3, 4.4, 5.5]
   l[:]=[3,4]               # l = [3, 4]
   
   # 在列表首部填加
   l = [3, 4]
   l[0:0]=[1,2]             # l = [1, 2, 3, 4]

   l = [3,4]
   l[1:1]=[3.14]            # l = [3, 3.14, 4]

   # 在列表尾部填加
   # 切片赋值支持索引越界(向后添加)
   l = [3,4]
   l[2:2]=[5, 6]
   l[-1:-1]=[5,6]           # l = [3, 4, 5, 6]
   
   # 切片赋值可以全部清空
   l = [3,4]
   l[::]=[]                 # l = []
   

   #字符串为可迭代对象,进行依次取值
   l = [2, 3, 4]
   l[1:2]='ABC'             # l = [2, 'A', 'B', 'C', 4]
   
   #切片赋值可以取可迭代对象range
   l = [2, -1, 7]
   l[1:2]=range(3,7)        # l = [2,3,4,5,6,7]
   
切片的注意事项:
  对于步长不等于1 的切片赋值,赋值运算符的右侧的可迭代对象提供元素的   个数不一定要等于切片切出的段数
  示例:
    l = [1,2,3,4,5,6,7,8]
    l[1::2] = 'ABCD' # 对的 
                     # l = [1, 'A', 3, 'B', 5, 'C', 7, 'D']
    
    l[1::2] = 'ABCDE'       # 错的  

del语句用来删除列表的元素
    (对变量所绑定的列表进行操作)
  语法:
    del 列表[索引]
        如: del L[0]
    del 列表[切片]
        如: del L[1::2]

扫描二维码关注公众号,回复: 3917760 查看本文章

练习一:
  已知有列表:
    l = [3,5]
  用索引和切片操作,将原列表改变为:
    l = [1,2,3,4,5,6]
  将列表反转,删除最后一个元素后打印此列表
   ....
    print(l)     #[6,5,4,3,2]

python 3中常用于序列的函数
  len(s)  返回序列的长度
  max(x)  返回序列的最大值元素
  min(x)  返回序列的最小值元素
  sum(x)  返回列中所有元素的和(元素必须是数值类型)
  any(x)  真值测试,如果列表中其中一个值为真值则返回True (与or相近)
  all(x)  真值测试,如果列表中所有值为真值返回True     (与and相近)

示例:
  L = [3, 1, 9, 7, 5]
  print(len(L))  # 5
  print(max(L))  # 9
  print(min(L))  # 1
  print(sum(L))  # 25

练习二:
  写程序,让用户循环输入一些整数,当输入-1时结束,
  将这些整数存于列表l中
  1)打印您共输入了多少个有效的数?
  2)打印您输入的最大数是?
  3)打印您输入的最小数是?
  4)打印您输入的这些数的平均值是多少?

python3中常用的列表的放法:
  详见:>>>>help list
  文档资料:list.html

   L.index(v [, begin[, end]])返回对应元素的索引下标
     l=[1,3,5,7]
     l.index(3)      #1

   l=[1,3,4,5,7,3,8,9]
     l.index(3)=1
     l.index(3,2)    #5
    
   L.insert(index, obj) 将某个元素插放到列表中指定的位置 
     l=[1,3,4,5,7,3,8,9]
     l.insert(2,2)     #l=[1,3,2,4,5,7,3,8,9]

   L.count(x) 返回列表中元素的个数 

   L.remove(x) 从列表中删除第一次出现在列表中的值 
     l=[1,3,4,5,7,3,8,9]
     l.remove(3)      #l=[1,4,5,7,3,8,9]
    
   
   L.copy() 复制此列表(只复制一层,不会复制深层对象) 
     l=[1,3,4,5,7,3,8,9]
     l[2]=[1]
     l2=l
     #  非复制,为赋值

     l2=l.copy()
     #  复制

   L.append(x) 向列表中追加单个元素
     l=[1,3,4,5,7,3,8,9]
     l.append(9)
     #  l=[1,3,4,5,7,3,8,9,9]
     l.append([8,9,9])
     #  l=[1,3,4,5,7,3,8,9,[8,9,9]]

   L.extend(list) 向列表追加另一个列表 
     l=[1,3,4,5,7,3,8,9]
     l.extend([8,9,9])
     #  l=[1,3,4,5,7,3,8,9,8,9,9]
     等同于l += []

   L.clear() 清空列表,等同于 L[:] = [] 
     l=[1,3,4,5,7,3,8,9]
     l.clear()
     #l=[]

   L.sort(reverse=False) 将列表中的元素进行排序,默认顺序按值的小到大的顺序排列 
     l=[1,3,4,5,7,3,8,9]
     L.sort(reverse=False)
     l=[1,3,3,4,5,7,8,9]
     #False为升序,True为降序

   L.reverse() 列表的反转,用来改变原列表的先后顺序 
     l=[1,3,4,5,7,3,8,9]
     L.reverse()
     #l=[9,8,3,7,5,4,3,1]

   L.pop([index]) 删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回删除元素的引用关系 
     l=[1,3,4,5,7,3,8,9]
     m=l.pop(2)   #不等同于  del
     #l=[1,3,5,7,3,8,9]
      m=4'

练习三:
 写一个程序,让用户输入很多个正整数,当输入小于0的数时结束输入
 1)打印这些数中最大的数
 2)打印这些数中第二大的数
 3)删除最小的一个数
 4)按原来顺序打印出剩余的这些数

 深拷贝和浅拷贝
  
 浅拷贝:shallow copy
   浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
   示例代码:
      l = [3.1, 3.2]         #绑定共用
      l1 = [1, 2, l]
      l2 = l1.copy()         #浅拷贝
      print(l1)              #[1, 2, [3.1, 3.2]]
      print(l2)              #[1, 2, [3.1, 3.2]]
      l2[2][0] = 3.14
      print(l1)              #[1, 2, [3.14, 3.2]]
      print(l2)              #[1, 2, [3.14, 3.2]]

 深拷贝:deep copy
   复制对象及对象关联的对象一起复制过程叫深拷贝
   示例代码:
      import copy                 #导入复制模块 
      l = [3.1, 3.2]              
      l1 = [1, 2, l]
      l2 = copy.deepcopy(l1)      #深拷贝
      print(l1)                   #[1, 2, [3.1, 3.2]]
      print(l2)                   #[1, 2, [3.1, 3.2]]
      l2[2][0] = 3.14
      print(l1)                   #[1, 2, [3.1, 3.2]]>>>>l1不变
      print(l2)                   #[1, 2, [3.14, 3.2]]'


 列表和字符串比较:
    1.都是序列,有先后顺序关系,有相同的运算操作
    2.列表是可变的,字符串是不可变的
    3.列表可以存任意类型的数据,字符串只能存字符
    

 字符串的文本解析方法:
   S.split(sep=None)将字符串,使用sep作用分割符分割S字符串,返回分割后的字符串列表,当不给定参数时,使用空白字符作为分隔符分割
   S.join(interable)用可迭代对象中的字符串,返回中间用S进行分割的字符串
  示例:
    s = 'Beijing is capital'
    l = s.split(" ")
    # ["Beijing", "is", "capital"]
    
    s = 'Beijing#is#capital'
    l = s.split("#")
    # ["Beijing"#"is"#"capital"]

    常用空白字符
    \t \n \r \x

    l=['aaa','bbbb','ccccc']
    '$'.join(l)
    #生成 'aaa$bbbb$ccccc'


 练习四:
   有字符串'hello'请生成'h e l l o'字符串和'h-e-l-l-o'
   l = list('hello')
   l=' '.join(l)   #' '.join("hello")   #'h e l l o'
   l='_'.join(l)   #'h-e-l-l-o'


 列表推导式  list comprehension
   列表推导式是用可迭代对象创建列表的表达式

  作用:
    用简单方法生成列表
  语法:
    [表达式 for 变量 in 可迭代对象]
    #先执行可迭代对象,然后执行变量,最后执行表达式
    或
    [表达式 for 变量 in 可迭代对象 if 真值表达式]
    #先执行可迭代对象,然后执行变量,之后执行if真值表达式,最后执行表达式
  示例:
    #生成一个数值1~9的平方的列表
    #[1,4,9,16,....81]

    #不用推导式:
     l = []
     for i in range(1,10):
         l.append(i**2)
    #推导式实现:
     l = [i**2 for i in range(1,10)]

 练习五:
 1. 用列表推导式生成1~100以内奇数的列表
    结果是:[1,3,5,7,...99]

    l=[i for i in range(1,100,2)]
    等同于
    l=[i for i in range(1,100) if i %2 == 1]
 2.输入一个开始的整数用begin绑定
   输入一个结束的整数用end绑定
   将从begin开始,到end结束(不包含end)的所有偶数存于列表中,并打印此表
   (可以使用推到列表式完成,也可以用循环语句来完成)
 
 列表推导式的嵌套
  语法:
    [表达式 
      for 变量1 in 可迭代对象1 if 真值表达式1
            2          1           3
        for 变量2 in 可迭代对象2 if 真值表达式2... ]
              5          4           6
   

  示例:
    #将列表[10, 20, 30] 中的元素与列表[1,2,3]   元素分别相加,将得到的元素放于一个列表中

    L = [x + y
          for x in [10, 20, 30]
            for y in [1,2,3]]
    print(L)  #[11, 12, 13, 21, 22, 23, 31,32,33]


 练习六:
  用字符串"ABC"和字符串"123"生成如下列表
  ['A1','A2','A3','B1','B2','B3','C1','C2','C3']
  已知有一个字符串:
   s = '100,200,300,500,800'
   将其转化为列表,列表的内部是整数
   L = [100,200,300,500,800] 


 课后练习:
  1.有一些数存于列表中,如:
      L = [1,3,2,1,6,4,2,....98,82]
   1)将列表L中出现的数字存于另一个列表L2中
     要求:
      重复出现多次的数字只在L2列表中保留一份
   2)将列表中出现两次的数字存于L3列表中(在L3列表中保留一份)
  2.计算出100以内的素数,将这些素数存于列表中,最后打印出列表中的这些素数
  3.生成40个斐波那契数(Fibonacci)
    1 1 2 3 5 8 13 21 ......
    要求将这数整数存于列表L中,最后打印出这些数
    (斐波那契的前两个是1, 1, 之后的数是前两个数的和)

猜你喜欢

转载自blog.csdn.net/qq_24137739/article/details/83590751