day06列表

该博客回顾了Python中for语句、可迭代对象等知识,重点介绍列表相关内容,包括列表的构造、运算、元素的添加、修改和删除,还提及Python中用于序列的函数、深拷贝和浅拷贝,以及字符串文本解析方法、列表推导式等,并配有相应练习。

day05回顾:

  • for 语句
    for 变是列表 in 可迭代对象:
    语句块1(重复执行多次)
    else:
    语句块2(在可迭代不再能提供数据时执行)
    可迭代对象:
    字符串 列表 range(开始,结束,步长)

  • continue 语句

  while 中
  for 中

- 语句嵌套:
  if  while for .....
  如:
    if xxx:
        while ....:
            for xxxx:
                if xxxx:
    
    while xxx:
        for yyy:
            ...
            if zzz:
               ....
        else:
            print(...)

    print("hello)

  • 列表 list
    []
    [1, 2, 3. 3.14, True, …]

  • 序列,可变的, 容器
    构造函数
    list()
    list(可迭代对象)

  • 列表的运算:
    运算符:
    + += * *=
    < <= > >= == !=
    in / not in
    索引[] / 切片[:] [::]
    索引和切片支持赋值操作:
    列表[整数列表] = 值
    列表[开始索引:结束索引:步长] = 可迭代对象

day06笔记:

列表

  • 向列表内添加数据
    L[0:0] = [100, 200]
    修改数据:
    L[1] = 300
    L[1:5] = [1,2,3]
    删除数据:
    L[1:5] = []

  • del 语句
    用于删除列表的元素
    示例:
    del L[2] # 删除单个元素
    del L[::2] # 删除切片切出来的部分

  • 练习:
    已知有列表:
    L = [3, 5]
    用索引的切片等操作,将原列表的改变为:
    L = [1, 2, 3, 4, 5, 6]
    将列表反转(先后顺序颠倒),删除最后一个元素后,打印此列表:
    print(L) # [6, 5, 4, 3, 2]

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

    • 示例:
    L = ['One', 2, '三']
    print(len(L))  # 3
    L = [8, 3, 6, 2]
    min(L)   # 2
    max(L)   # 8
    sum(L)   # 19
    all( [True, 1, 0.01, [1,2,3], "hello"])  # True
    all( [None, False, 1, 0.01, [1,2,3], "hello"])  # False
    any( [None, False, 0, 0.0, [], '', "hello"])  # True
    any( [None, False, 0, 0.0, [], '']) # False
  • 练习:

    1. 输入三个数,存于列表中,打印出这三个数的最大值,最小值和平均值
    2. 写程序,让用户循环输入一些整数,当输入 -1时结束输入,将这些整数存于列表L中
    1. 打印您共输入了几个有效的数
    2. 打印您输入的数的最大值是多少?
    3. 打印您输入的数的平均值是多少?
  • 深拷贝和浅拷贝
    浅拷贝 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]]
    L[0] = 3.14  # L2[2][0] = 3.14
    print(L1)  # [1, 2, [3.14, 3.2]]
    print(L2)  # [1, 2, [3.14, 3.2]]
    print(L)   # [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]]
    print(L2)  # [1, 2, [3.14, 3.2]]
    print(L)   # [3.1, 3.2]
  • 列表与字符串比较:

    1. 都是序列,元素之间有先后顺序关系
    2. 字符串是不可变的序列,列表是可变的序列
    3. 字符串中每个元素只能存储字符(编码),而列表可以存储任意类型的元素
    4. 列表和字符串都是可迭代对象
  • 字符串文本解析方法split 和join
    S.split(sep=None) 将字符串,使用sep作用分隔符分割 S字符串,返回分割后的后的字符串列表,当不给定参数时,用空白字符作用分隔符分割

    S.join(iterable) 用可迭代对象中的字符口中,返回一个中间用S进行分隔的字符串

    示例:
    s = “Beijing is capital”
    L = s.split(’ ') # L = [‘Beijing’, ‘is’, ‘capital’]
    L = [‘aaaa’,‘bbbb’,‘cccc’]
    s2 = “#”.join(L) # s2 = “aaaa#bbbb#cccc”

  • 练习:
    有字符串
    s = “hello”
    请生成如下字符串:
    ‘h e l l o’ 和 ‘h-e-l-l-o’

    ’ '.join(s) # ‘h e l l o’
    ‘-’.join(s) # ‘h-e-l-l-o’

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

    • 作用:
      用简易方法生成列表
    • 语法:
      [表达式 for 变量 in 可迭代对象]

      [表达式 for 变量 in 可迭代对象 if 真值表达式]
      示例:
   	# 以下生成一个数值为1~9的平方的列表
    # [1, 4, 9, 16, 25, ...... 81]
    L = []
    for x in range(1, 10):
        L.append(x**2)
    # 用列表推导式:
    L = [x**2 for x in range(1, 10)]
  • 练习:
    用列表推导式生成 1 ~ 100内所有奇数的平方的列表
    [1, 9, 25, … ]

    L = [x**2 for x in range(1, 100, 2)]

    示例:

    # 以下生成一个数值为1~9的平方的列表(只保留偶数)
      [4, 16, 36 ...]
    L = [x**2 for x in range(1, 10) if x % 2 == 0]
  • 练习:

    1. 写程序.输入一个开始的整数值用begin绑定
      输入一个结束的整数用end绑定
      将从begin开始到end结束(不包含end)的所有偶数存于列表中,并打印(建议用列表推导式完成)

    2. 写程序,让用户输入很多个整数(包含正整数和负整数) 保存于列表L 中. 输入0结束输入. 然后把列表L中的所有正数存于列表L1 中,把列表L中的所有负数存于列表L2中
      打印原列表L和 正数列表L1 和负数列表L2

  • 列表推导式的嵌套:
    [表达式1
    for 变量1 in 可迭代对象1 if 真值表达式1
    for 变量2 in 可迭代对象2 if 真值表达式2
    … ]

    • 示例:
      将列表[10, 20, 30] 中的元素与列表[1,2,3]元素分别相加,将得到的元素放于一个列表中
      L = [x+y for x in [10, 20, 30] for y in [1, 2, 3]]
  • 练习:
    用字符串"ABC" 和 “123” 生成如下列表:
    [‘A1’, ‘A2’, ‘A3’, ‘B1’, ‘B2’, ‘B3’, ‘C1’, ‘C2’, ‘C3’]
    答案:
    [x + y for x in “ABC” for y in “123”]

    1. 已知有一个字符串:
      s= ‘100,200,300,500,800’
      将其转化为数字组成的列表,列表内部为整数:
      L = [100,200,300,500,800]

    2. 用列表推导式生成如下列表:
      L = [1, 4, 7, 10, … 100]
      答案:
      L = [x for x in range(1, 101, 3)]

    3. 用例表推导式生成如下列表(思考题)
      [[1,2,3], [4,5,6], [7,8,9]]
      答案:

    # 方法1
    [[x, x+1, x+2] for x in range(1,8,3)]
    # 方法2
    [[y for y in range(x, x + 3)]
               for x in range(1,8,3)]
    # 改为for语句
    L = []
    for x in range(1, 8, 3):
        temp = []
        for y in range(x, x + 3):
            temp.append(y)
        L.append(temp)
  • 练习:

    1. 有一些数存于列表中.如:
      L = [1, 3, 2, 1, 6, 4, 2, … 98,82]
    1. 将列表L中出现的数字存入到另一个列表L2中
        要求:
      重复出现多次的数字只在L2中保留一份(去重)
    2. 将列表中出现两次的数字存于列表L3中,在L3中只保留一份
    1. 计算出100以内的全部素数,将这些素数存于列表中,然后打印出列表中的这些素数

    2. 生成前40 个斐波那契(Fibonacci)数列中的数
      1 1 2 3 5 8 13 21
      要求: 将这些数保存于列表中.打印这些数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值