企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 切片操作 python的切片操作是用来访问可迭代对象的,包括字符串和数组,列表等。 我们以数组为例进行介绍 ```python a = [1, 2, 3, 4, 5] # 访问数组的前3个元素 a[0:3] ``` [1, 2, 3] 可以看到我们采用a[0:3]的方法很容易的访问到了数组的前三个元素。 对于具有序列结构的数据来说,切片操作的方法是:consequence[start_index: end_index: step]。 start_index:表示是第一个元素对象,正索引位置默认为0;负索引位置默认为 -len(consequence) end_index:表示是最后一个元素对象,正索引位置默认为 len(consequence)-1;负索引位置默认为 -1。 step:表示取值的步长,默认为1,步长值不能为0。 ```python print(a[-2]) ``` 4 ```python a[0::2] # 从第0个元素开始,每隔两个元素取一个元素 ``` [1, 3, 5] ```python a[-4 : 3] # 从倒数第四个元素到正数第三个元素 ``` [2, 3] ```python a[-4 : -2] # 从倒数第四个元素到正数第四个元素 ``` [2, 3] 可以看到从杨是从 # 利用步长对序列进行倒序取值 在切片运算中,步长为正,表示从左至右,按照索引值与起始位置索引之差可以被步长整除的规律取值;当步长为负,则表示从右至左,按照按照索引值与起始位置索引之差可以被步长整除的规律取值。 根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比reverse方法更方便,且适用于没有reverse方法的字符串和元组。 ```python print(a[::-1]) ``` [5, 4, 3, 2, 1] ```python a[::-2] # 从最后一个元素开始,每两个元素取一个 ``` [5, 3, 1] # 列表生成式 列表生成式是python中非常好用的一个语法糖,很多时候可以大大的简化代码,让代码更加容易阅读和理解。是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11): ```python list(range(1, 11)) ``` [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环: ```python demolist = [] for x in range(1, 11): demolist.append(x * x) demolist ``` [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list: ```python [x * x for x in range(1, 11)] ``` [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。 for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方: ```python [x * x for x in range(1, 11) if x % 2 == 0] ``` [4, 16, 36, 64, 100] 还可以使用两层循环,可以生成全排列: ```python [m + n for m in 'ABC' for n in 'XYZ'] ``` ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] 在涉及到列表操作的时候,列表生成式是非常方便的,举个简单的例子,举个例子我们要找出1到100中所有3的倍数: ```python L = [] for x in range(100): if x % 3 == 0: L.append(x) print(L) ``` [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] ```python # 而如果用列表生成式就简单多了 print([x for x in range(100) if x % 3 == 0]) # 代码的可读性高,只要一行代码就能够完成四行代码的工作 # 在比如找出100以内所有3或者7的倍数 print([x for x in range(100) if x % 3 == 0 or x % 7 == 0]) ``` [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] [0, 3, 6, 7, 9, 12, 14, 15, 18, 21, 24, 27, 28, 30, 33, 35, 36, 39, 42, 45, 48, 49, 51, 54, 56, 57, 60, 63, 66, 69, 70, 72, 75, 77, 78, 81, 84, 87, 90, 91, 93, 96, 98, 99] 绝大部分用到循环的地方,都可以用列表生成式来简化代码,列表生成式是python中非常强大的工鞥呢。