Py05 列表特定操作 Python推导语法 嵌套

F1 列表的特定类型操作

1.Python的列表与其他语言的数组类似但是强大的多,因为列表没有固定类型的约束。

2.列表没有固定大小,我们可以按需要进行增加或减小列表大小。

>>>L=[1,'ab',1.23]
>>>L.append('qx')
>>>L
[1, 'ab', 1.23, 'qx']
>>>L.pop(0)
1
>>>L
['ab', 1.23, 'qx']
>>>L.pop(-1)
'qx'
>>>L
['ab', 1.23]

上例列表类型有3种 特定类型操作都是对象后面加点调用 .append(),.pop(这里是偏移量)

3.其他列表方法 insert remove extend

4.因为列表可变,大多数列表方法都会原位置改变列表对象,而不是创建一个新的列表 与字符 数字不同

>>>M=['b','c','a']
>>>M.sort()
>>>M
['a', 'b', 'c']
>>>M.reverse()
>>>M
['c', 'b', 'a']

都是在原位置进行了改变,直接改变了原列表

S2 边界检查

1.尽管列表没有固定大小,Python仍不允许引用不存在的元素 ,超出列表末尾之外的索引会返回错误,对列表末尾范围之外的赋值也会返回错误

>>>M=[1,2,3]
>>>M[5]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list index out of range
>>>M[5]=1
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: list assignment index out of range

 2.在Python中并不是默默的增大列表作为响应而是会提示错误,为了让一个列表增大,可以调用append这个列表特定方法

T3  嵌套

1.Python核心数据类型的一个优秀特性是支持任意嵌套,能够以任意组合对进行嵌套,还可以多个层次进行嵌套  例如能够让一个列表包含一个字典 让这个字典包含另一个列表

2.

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>M
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>>M[0][0]
1
>>>M[1][2]
4

列表嵌套实现矩阵赋值

F4 推导  高级操作 列表推到表达式

1.例如上矩阵例提取某一行是简单的,但是提取某一列需要借助循环,但是通过列表推导表达式可以方便的直接提取

>>>M
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>>A=[row[0] for row in M]
>>>A
[1, 2, 3]
>>>A=[row[1] for row in M]
>>>A
[2, 3, 4]

看懂的方式是从后往前看 inM: M中    for row: 每一行   row[1] 的第二个元素

2.列表推导源自数学中集合的概念,本质是通过对   序列(不止限于列表)  中的每一项运行一个表达式来创建一个新列表的方法,每次一个,从左至右

3.列表推导是编写在方括号中的(提醒你在创建一个新列表方法)

4.列表推导使用同一个变量名的表达式和循环结构组成

更复杂的操作  提取对角线元素

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>M
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>>diag=[M[x][x] for x in [0,1,2]]
>>>diag
[1, 3, 5]

 只提取第一列中偶数元素

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>B=[row[0] for row in M if row[0]%2==0]
>>>B
[2]

 第一列值加1

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>B=[row[0]+1 for row in M]
>>>B
[2, 3, 4]

 列表推导表达式针对非列表如字符串(序列都可以) 但返回根据你是用的是方括号 还是花括号 还是括号

>>>Q=[2*c for c in 'love']
>>>Q
['ll', 'oo', 'vv', 'ee']

 5. 内置函数range() 配合list()生成列表

>>>list(range(-8,6,2))
[-8, -6, -4, -2, 0, 2, 4]

 前面(-8,6)表示的集合实际上是左闭右开的  幅度为2 最后一个参数

>>>[[x**2,x**3] for x in range(4)]
[[0, 0], [1, 1], [4, 8], [9, 27]]
>>>[x**2 for x in list(range(4))]
[0, 1, 4, 9]
>>>[x**2 for x in range(4) if (x**2)%2==0]
[0, 4]

range()函数在列表推到表达式中不需要加list()

6.列表推到是一个可选的特性

7.列表推导  更一般的用法 不仅仅是生成列表,括号中的推到语法可以用来创建产生所需结果的生成器

 

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>G=(sum(row) for row in M)
>>>next(G)
6
>>>next(G)
9
>>>next(G)
12

 8. 内置map(a,b)  a 是一个函数  作用到b的每一个对象上

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>list(map(sum,M))
[6, 9, 12]

 9.推导语法也可以用来创建集合和字典

>>>M=[[1,2,3],[2,3,4],[3,4,5]]
>>>{sum(row) for row in M}
{9, 12, 6}
>>>{i:sum(M[i]) for i in range(3)}
{0: 6, 1: 9, 2: 12}

10.实际上,列表 集合 字典 生成器  都可以用 推导语法来创建 

>>>[ord(x) for x in 'love']
[108, 111, 118, 101]
>>>[ord(x) for x in 'I love you']
[73, 32, 108, 111, 118, 101, 32, 121, 111, 117]
>>>{ord(x) for x in 'I love you'}
{32, 101, 73, 108, 111, 117, 118, 121}
>>>{x:ord(x) for x in 'I love you' }
{'I': 73, ' ': 32, 'l': 108, 'o': 111, 'v': 118, 'e': 101, 'y': 121, 'u': 117}
>>>(ord(x) for x in 'love' )
<generator object <genexpr> at 0x000001C1D60FA820>

内置函数ord()返回对应字符的ASCII码

注意 集合 与 字典 没有左右相对顺序 且 会将相同元素只保留一个 其他 都去掉 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值