(D06)Python-列表,深浅拷贝

版权声明:转载请声明 https://blog.csdn.net/dirckes8813/article/details/83793667

列表 List


列表的比较运算:

运算符:

  • < <= > >= == !=

说明:

  • 列表的比较规则与字符串的比较规则相同
  • 列表要求每两个元素能依次进行比较,否则会出现类型错误

示例:

   [1, 2, 3]  < [1, 2, 4]  # True
   [1, 2, 3] != [1, 2, 4]  # True
   ["One", "Two"] < ["1", "2"]  # False
   [1, 'Two'] > ['Two', 1]  # TypeError
   [1, "二", 3.14] < [2, "2", 1]  # True

列表的in / not in 运算符

  • 判断一个值是否存在于列表中,如果存在则返回True,
  • 否则返回False
  • 同字符串的 in 运算符类似

示例:

 x = [1, 'Two', 3, "四"]
 3 in x       # True
 "3" in x     # False
 10 not in x  # True

列表的索引操作:

  • 索引取值
  • 语法:
    • x = 列表[整数表达式]
  • 用法:
    • 等同于字符串的索引(同样分为正向索引和反向索引)

索引赋值

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

语法:

  • 列表[整数表达式] = 表达式

示例:

 x = [1, 2, 3, 4]
 x[2] = 1 + 2.14  # 改变了第三个元素的值
 print(x)  

列表的切片操作

  • 切片取值
  • 列表[起始索引:终止索引:步长]
  • 列表的切片取值是从原列表中取出想要的元素再次组成一个新的列表

示例:

  • L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • y = L[1:10:2] # y = [1, 3, 5, 7, 9]

切片的赋值操作
作用:

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

语法:

  • 列表[切片] = 可迭代对象

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

示例:
L = [2, 3, 4]
L[0:1] = [1.1, 2.2] # L=[1.1, 2.2, 3, 4]
L[0:2] = [2] # L = [2, 3, 4]
L[1:2] = [3.1, 3.2] # L = [2, 3.1, 3.2, 4]

 L = [2, 3, 4]
 L[1:1] = [2.1, 2.2]  # L = [2, 2.1, 2.2, 3, 4]
 L[0:0] = [0, 1]  # L = [0, 1, 2, 2.1 ....]
 L = [2, 3, 4]
 L[3:3] = [5, 6]  # L = [2, 3, 4, 5, 6]

 L = [2, 3, 4]
 L[1:2] = "AB" # L = [2, 'A', 'B', 4]
 L[1:3] = range(7, 10)  # L = [2, 7, 8, 9, 4]

切片的注意事项:

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

    L = [1, 2, 3, 4, 5, 6]
    L[::2] = “ABC” # 对的
    L[::2] = “abcd” # 错的

del 语句

  • 可以用于删除列表的元素

语法:

  • del 列表[整数表达式]
  • del 列表[切片]
    示例:
  • L = [1, 2, 3, 4, 5, 6, 7, 8]
  • del L[-1] # L = [1, 2, 3, 4, 5, 6, 7]
  • del L[1::2] # L = [1, 3, 5, 7]

练习:

已经有列表:
 L = [3, 5]
用索引和切片操作,将原列表改变为:
 L = [1, 2, 3, 4, 5, 6]
将列表反转,结果如下:
 L = [6, 5, 4, 3, 2, 1]
然后删除最后一个元素,结果如下 :
 L = [6, 5, 4, 3, 2]
 
写一个程序.让用户输入很多个正整数,当输入负数时结束输入
将用户输入的数字存储于列表中
  1. 打印存有数字的列表
  2. 求出这些数字中的平均数
  3. 求出这个数字中的最大数
如:
 请输入: 1
 请输入: 2
 请输入: 99
 请输入: 100
 请输入: -1
打印如下 :
 列表是: [1, 2, 99, 100]
 平均值是:  55.5
 最大数是: 100

python3中常用于的序列的函数

len(x)  返回序列的长度
max(x)  返回序列的最大值元素
min(x)  返回序列中最小值元素
sum(x)  返回序列中所有元素的和(元素必须是数字类型)
any(x)  真值测试.如果列表中的一个值为真值则返回True
all(x)  真值测试.如果列表中所有的值为真值则返回True

示例:

 L = ["Beijing", 1, 123]
 print(len(L))  # 3
 L = [8, 3, 6, 2]
 print(max(L))  # 8
 print(min(L))  # 2
 print(sum(L))  # 19

练习:

写一个程序,让用户输入很多个正整数,当输入小于零的数时
结束输入
 1) 打印这些数中最大的数
 2) 打印这些数中第二大的数
 3) 删除最小的一个数

深拷贝 deep 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]]
       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]]
		print(L2)  # [1, 2, [3.14, 3.2]]

列表与字符串比较:

1. 列表和字符串都是序列,元素之间有先后顺序关系
2. 列表和字符串有相同的操作: + += * *= < > in ...
3. 字符串是不可变化的序列,列表是可变的序列
4. 字符串的每个元素只能存储字符,而列表可以存储任意类型
 的元素
5. 列表和字符串都是可迭代对象

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

  • S.split(sep=None) 将字符串使用sep作为分隔符分割s
    字符串,返回分割后的字符串列表;当不给定参
    数时,用空白字符作为分隔符
  • S.join(iterable) 用可迭代对象中的字符串生成一个中
    间用S进行分隔的字符串

示例:

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

 s2 = "##".join(L)  # s2 = "Beijing##is##Capital"

列表推导式 list comprehesion

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

  • 作用:

    • 创建列表
  • 语法:

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

    • 生成一个数值为1~9的平方的列表

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

    • L = [1, 4, 9, 16 … 64, 81]

    • 生成一个数值1~9的平方的列表(只要其中奇数的平方)

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

    • L = [1, 9, 25, 49, 81]

以上列表推导式可以改写为:

 L = []
 for x in range(1, 10):
     if x % 2 == 1:
         L.append(x**2)

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

 如:
 L = [x + y for x in "ABC" for y in "123"]

 # L = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 
         'C1', 'C2', 'C3']

练习:

1. 有一些数存于列表中,如:
 L = [1, 3, 2, 1, 6, 4, 2, ..... 98, 82]
 1) 将列表中出现的数字存入到另一个列表L2中
   要求:
     重复出现多次的数字只能在L2中保留一份(去重)
 2)  将列表中出现两次的数字存于L3列表中,在L3列表中
    只保留一份

2.生成一个列表,求 x 的平方+1的列表,跳过结果能被5整除的
   数, (注: 0 <= x <= 100)

3. 把 0 ~ 100 之 间的所有素数存于一个列表中
  即: L = [2, 3, 5, 7, 11, ..... 97]

猜你喜欢

转载自blog.csdn.net/dirckes8813/article/details/83793667