列表(二)

目录

一、操作列表

  1.嵌套列表

  2.列表的常用操作符

二、列表推导式

1.创建二维列表

2.扩大为原来的二倍

3.筛选生成

4.提取第行列,行line[],列row[]

5.循环和列表表达式区别


一、操作列表

  1.嵌套列表

        matrix=[[1,2,4],            
                      [8,5,7]
                      [4,6,9]]

  2.列表的常用操作符

        比较:如果有多个元素,默认从第一个元素开始比较,比较对应的ASCII码值大小;
        逻辑(and or)
        连接(+):[1, 2, 3] + [4, 5, 6] 结果是 [1, 2, 3, 4, 5, 6]
        重复(*):['Hi!'] * 4 结果是 ['Hi!', 'Hi!', 'Hi!', 'Hi!']
        成员关系(in 和 not in):3 in [1, 2, 3] 结果是 True

        is运算符:用于检验俩个变量是否指向同一个对象,是否在同一地址中,Python对不同对象的储存机制是不一样的,is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等

>>> x is y
True
>>> x="我是一个字符串"
>>> y="我是一个字符串"
>>> x is y
False
>>> x=[1,2,3]
>>> y=[1,2,3]
>>> x is y
False
>>> 

        遍历列表

>>> c                                #一维
[9, 6, 5, 4, 4, 4, 2, 1, '新元素']
>>> for i in a:
	print(i)

	
9
6
5
4
4
4
2
1
新元素

>>> matrix=[[1,2,4],#二维
	    [8,5,7],
	    [4,6,9]]

>>> for i in matrix:
	for j in i:
		print(j)

		
1
2
4
8
5
7
4
6
9 

>>> for i in matrix:
	for j in i:
		print(j,end=' ')   #以空格隔开内层元素,使其在一行[1,2,3]

	
1 2 4 8 5 7 4 6 9 
>>> for i in matrix:
	for j in i:
		print(j,end=' ')   #以空格隔开内层元素,使其在一行
	print()                #使外层元素在一列

	
1 2 4 
8 5 7 
4 6 9 
>>> 

注意:变量常常被描述为一个盒子,用来存储值,但变量实际上是指向特定值的一个标签

        深浅拷贝:copy()方法拷贝的是整个列表对象,而不仅仅是变量的引用,为浅拷贝(切片方法也是浅拷贝),浅拷贝只是拷贝了外层的对象,如果是嵌套列表的话拷贝的只是其引用。

深拷贝要用到copy模块:import  copy,deepcopy在原对象拷贝的同时,也将原对象内部所有引用的子对象一并进行了拷贝,多层嵌套的化也会全部考虑,但为了效率默认为浅拷贝。

>>> x=[[1,3,2],
       [5,4,6],
       [8,9,7]]
>>> y=x.copy()                      #列表的copy方法
>>> y
[[1, 3, 2], [5, 4, 6], [8, 9, 7]]
>>> x[1][1]=0
>>> y
[[1, 3, 2], [5, 0, 6], [8, 9, 7]]


>>> import copy                    #引入copy模块
>>> y=copy.copy(x)                #copy模块的copy函数
>>> y
		
[[1, 3, 2], [5, 0, 6], [8, 9, 7]]
>>> x[1][1]=4
		
>>> y
		
[[1, 3, 2], [5, 4, 6], [8, 9, 7]]


>>> y=copy.deepcopy(x)            #copy模块的deepcopy函数,深拷贝
		
>>> y
		
[[1, 3, 2], [5, 4, 6], [8, 9, 7]]
>>> x[1][1]=0
		
>>> y
		
[[1, 3, 2], [5, 4, 6], [8, 9, 7]]
>>> x
		
[[1, 3, 2], [5, 0, 6], [8, 9, 7]]
>>> 

二、列表推导式

在python中以C语言的速度来运行,而不是python脚本的虚拟机pvm以步进执行效率更高比直接用for循环提高1倍效率格式:[与目标对象有关的表达式   for   对象目标   in   操作列表] 

1.创建二维列表

代码如下(示例):

>>> s=[[2]*3 for i in range(3)]
>>> s
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
>>> s[1][1]=0
>>> a
[9, 6, 5, 4, 4, 4, 2, 1, '新元素']
>>> s
[[2, 2, 2], [2, 0, 2], [2, 2, 2]]

2.扩大为原来的二倍

>>> a=[3,2,4,5,1]
>>> b=[i*2 for i in a]                #b的值为a的2倍
>>> c=[i*2]                            #直接乘2报错
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    c=[i*2]
NameError: name 'i' is not defined
>>> c=a*2                            #c扩充为含两次a元素的列表
>>> b
[6, 4, 8, 10, 2]
>>> c
[3, 2, 4, 5, 1, 3, 2, 4, 5, 1]
>>> c=[a*2]
>>> c
[[3, 2, 4, 5, 1, 3, 2, 4, 5, 1]]    #c扩充为以含两次a元素的列表为元素的列表
>>> b
>>> 

>>> c=a*2
>>> c[3]=0
>>> c
[3, 2, 4, 0, 1, 3, 2, 4, 5, 1]      #由此可见a*2
>>> 

3.筛选生成

执行顺序

代码如下(示例):

>>> even=[i for i in range(12) if i%2==0]#筛选生成列表
>>> even
[0, 2, 4, 6, 8, 10]
>>> words=["father","mather","fff","hhh","tytu"]
>>> fhead=[i for i in words if w[0]=="f"]
>>> fhead=[i for i in words if i[0]=="f"]
>>> fhead
['father', 'fff']
>>> 

4.提取第行列,行line[],列row[]

>>> y=[row[1] for row in x]#提取第行列,行line[],列row[]
>>> y
[3, 4, 9]
>>> y=[x[i][2-i] for i in range(len(x))]
>>> y
[2, 4, 8] 

5.循环和列表表达式区别

循环是逐个迭代修改原列表的值,列表表达式是创建一个新的列表然后赋值给原来的变量名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值