Python学习记——(6)列表、字符串、深浅拷贝

列表的索引操作:

  语法:列表[整数表达式]

  用法:等同于字符串的索引,索引分正向索引和反向索引,规则与字符串规则完全相同

  示例:

    L = list("ABCD")

    print(L[1])  # B

列表的索引赋值

  列表是可变的,可以通过索引赋值改变列表中的元素

示例

  L = [1, 2, 3, 4]

  L[2] = 3.1

  print(L)

列表的切片

  语法:列表[:]

     列表[::]

  说明:列表的切片取值返回一个列表,规则等同于字符串切片规则

  示例:

    x = list(range(10))

    y = x[1:9:2]  # 奇数

    y = x[::]     # 复制x列表

列表的切片赋值

  语法:列表[切片slice] = 可迭代对象

  作用:可以改变原列表的排列,可以插入数据和修改数据

     可以用切片改变列表对应的元素的值

  说明:切片的赋值运算符(=)的右侧必须是一个"可迭代对象"

  示例:

    L = [2, 3, 4]

    L[1:2] = [3.1, 3.2]  # L = [2, 3.1, 3.2, 4]

    L[:1] = [1.1, 2.2]  # L=[1.1, 2.2, 3.1, 3.2, 4]

    L = [2, 3, 4]

    L[2:] = []

    L = [2, 3, 4]

    L[:0] = [0, 1]

    L = [2, 3, 4]

    L[3:] = [5, 6, 7]

    L = [2, 3, 4]

    L[1:2] = "ABC"  # L = [2, 'A', 'B', 'C', 4]

    L = [1, 2]

    L[2:] = range(3, 10)  # L = [1,2,3,4....9]

切片注意事项:对于步长不等1的切片赋值,赋值运算符的右侧的可迭代对象提供的数据元素的个数一定要等于切片切出的段数

例如:L = [1, 2, 3, 4, 5, 6]

    L[::2] = 'ABC'  # 正确

    L[::2] = 'ABCDE' # 错误

del 语句: del 可以用来删除列表元素

  语法:del 列表[索引] del 列表[切片]

  示例:

    L = [1, 2, 3, 4, 5, 6]

    del L[1]

    del L[2]

    del L[-1]

    L = [1, 2, 3, 4, 5, 6]

    del L[::2]

练习: 已知有列表:L = [3, 5]用索引和切片操作将原列表L 改变为: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,否则返回False

  示例:

    L = [1, 7, 0, 3, 2]

    print(len(L))  # 5

    print(max(L))  # 7

    print(min(L))  # 0

    print(sum(L))  # 13

    print(any(L))  # True

    print(all(L))  # False

练习:

  1. 输入三个数存于列表中,打印这三个数的最大值,最小值和平均值

  2. 写程序,让用户循环输入一些整数,当输入-1时结束输入,将这些整数存于列表L中

     1) 打印您共输入了几个有效的数?

     2) 打印您输入的数有最大数是多少?

     3) 打印您输入的数的最小数是多少?

     4) 打印您输入的这些数的平均值

python3中常用的列表方法(method)

详见:>>> help(list)

方法

意义

L.index(v [, begin[, end]])

返回对应元素的索引下标, begin为开始索引,end为结束索引,当 value 不存在时触发ValueError错误

L.insert(index, obj)

将某个元素插放到列表中指定的位置

L.count(x)

返回列表中元素的个数

L.remove(x)

从列表中删除第一次出现在列表中的值

L.copy()

复制此列表(只复制一层,不会复制深层对象)

L.append(x)

向列表中追加单个元素

L.extend(lst)

向列表追加另一个列表

L.clear()

清空列表,等同于 L[:] = []

L.sort(reverse=False)

将列表中的元素进行排序,默认顺序按值的小到大的顺序排列

L.reverse()

列表的反转,用来改变原列表的先后顺序

L.pop([index])

删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回删除元素的引用关系

 

练习:

  写一个程序。输入很多个正整数,当输入小于零的数时结束输入

    1) 打印这些数的和

    2) 打印出这些数中最大的一个数

    3) 打印这些数中第二大的一个数

    4) 删除最小的一个数

sorted 函数:用于生成一个排序后的列表

   格式:sorted(iterable, reverse=False)

reversed(seq)  返回原序列反序的可迭代对象

示例:

  L = [7, 9, 5, 1, 3]

  L2 = sorted(L)  # L2 = [1, 3, 5, 7, 9]

  L3 = sorted(L, reverse=True)  # L3 = [9, 7, 5, 3, 1]

  for x in reversed(L):

      print(x)  # 3 1 5 9 7

字符串的文本解析方法 split 和 join方法

  S.split(sep=None)  将字符串使用sep作为分隔符分割S字符串,返回分割后的字符串列表,当不给定参数时默认用空白字符作为分隔符分割

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

  示例:

    s = 'Beijing is capital'

    L = s.split(' ')  # L = ['Beijing', 'is', 'capital']

    L = ["C:", "Windows", "System32"]

    s = '\\'.join(L)  #s=r"C:\Windows\System32"

深拷贝 deep copy 和浅拷贝 shallow copy

浅拷贝 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

  print(L1)  # [1, 2, [3.14, 3.2]]

  print(L2)  # [1, 2, [3.14, 3.2]]

  说明:浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程

深拷贝:对所有可变对象进行层层复制,实现对象的各自独立

  :

  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]]

  L[0] = 3.14

  print(L1)  # [1, 2, [3.14, 3.2]]

  print(L2)  # [1, 2, [3.1, 3.2]] #此列表不受影响

列表推导式 list comprehesion

  列表推导式是用可迭代对象依次生成带有多个元素的列表的表达式

  作用:用简易方法生成列表

  语法:[表达式 for 变量 in 可迭代对象]

    [表达式 for 变量 in 可迭代对象 if 真值表达式]

  示例:

    # 生成一个列表,此列表内的数值是1~9的方平

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

    # 以前的方法:

    L = []

    for x in range(1, 10):

        L.append(x ** 2)

练习:用列表推导式生成 1 ~ 100 内奇数的列表

   :

     1. [x * 2 + 1 for x in range(50)]

     2. [x for x in range(1, 100, 2)]

     # 用带有if的列表推导式

       [x for x in range(100) if x % 2 ==1]

列表推导式的嵌套:

  语法:[表达式

       for 变量1 in 可迭代对象1 if 真值表达式1

          for 变量2 in 可迭代对象2 if 真值表达式2

             ...]

示例:用字符串"ABC" 和 "123" 生成如下列表:['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']L = [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, 3, 2, 1, 6, 4, 2, .... 98, 82]将列表中的数字存入到另一个列表L2中,要求:重复出现多次的数字只在列表L2中保留一份

  3. 生成前40个斐波那契数(Fibonacci)1  1  2  3  5  8  13 ....将这40个数保存在列表中斐波那契数是 前两个是1, 从第三个起是前面两个数的和

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值