【Python】 高级特性之切片(Slice)和迭代操作

一、切片

切片是为了解决取取一个list或tuple的部分元素比较麻烦的问题。取一个list或tuple的部分元素是比较常见的操作。有两种方法可以做:

1.按照索引

2.循环

但是上述方法十分繁琐,且有局限性。因此,Python提供了切片(Slice)操作,来简化这种操作。

1.切片操作的使用方法

切片的规则如下:

L(m:n)m,n分别代表开始索引,结束索引。切片后的结果是索引m到索引n-1的值,不包括索引n的值。

·举个例子,假设有如下的一个 list:

>>> L=[1,2,3,4,5,6,7,'a','b','c']
>>> L
[1, 2, 3, 4, 5, 6, 7, 'a', 'b', 'c']

从第一个元素开始依次取3个元素:

>>> L[0:3]
[1, 2, 3]
>>> L[:3]
[1, 2, 3]
#可以看到如果起始值是0,0可以省略

如果要取这个列表中的[6, 7, ‘a’]应该怎么做呢?

>>> L[5:8]
[6, 7, 'a']

如果要取这个列表中的[6, 7, ‘a’, ‘b’, ‘c’]应该怎么做呢?

>>> L[5:10]
[6, 7, 'a', 'b', 'c']

到这里,我们发现一个规律:
切片操作的结束索引=切片操作的起始值+要取的元素的长度
上述两个操作可以写成:

>>> L[5:5+3]
[6, 7, 'a']
>>> L[5:5+10]
[6, 7, 'a', 'b', 'c']

在list操作中,支持L[-1]这样的操作,那么切片也同样支持。索引从-1开始。
比如:取倒数最后一个元素:

>>> L[-1]
'c'

取后面4个元素

>>> L[-4:]
[7, 'a', 'b', 'c']

3.切片操作的应用

先创建一个0-99的数列

>>> L=list(range(100))

取前10个数

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

取后10位数

>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

取45-55的数字

>>> L[45:55]
[45, 46, 47, 48, 49, 50, 51, 52, 53, 54]

取十个数字,每两个取一个

>>> L[:10:2]
[0, 2, 4, 6, 8]

取所有的数字,每10个取一个

>>> L[::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

也可以什么都不写,复制一份List

>>> L[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

同样的,tuple 也可以用切片操作。字符串也可以看做是一个list,也可以用切片操作。在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

二、迭代

1.与其他语言的不同

比如C或Java,迭代是通过下标完成的。要迭代的一定是同一种数据类型的集合。

比如:

for(int i =0; i<list.length;i++){
    n = list[i];
}

Python的优点:

  1. 只要作用于一个可迭代对象,for循环就可以正常运行,不必关心对象的数据类型,无论是都有下标,都可以迭代。

  2. 语法上Python的抽象程度更高,通过for…in来完成。

2.迭代的具体使用

2.1 如何判断一个对象是可迭代对象

通过collections模块的Iterable类型判断

>>> isinstance('abc',Iterable) #字符串是否可迭代
True
>>> isinstance(12721379,Iterable) #整数是否可迭代
False
>>> isinstance([1,2,3],Iterable) # list是否可迭代
True
>>> isinstance((1,2,3),Iteable) # tuple是否可迭代
True
>>> isinstance({'Michael': 95, 'Bob': 75, 'Tracy': 85},Iterable) # dict是否可迭代
True

注意:这个方法必须有两个参数,否则会报错

>>> isinstance([1,2,3])
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    isinstance([1,2,3])
TypeError: isinstance expected 2 arguments, got 1
2.2 具体使用
2.2.1 迭代 list
>>> L=list(range(10))
>>> for i in L:
	    print(i)
# 执行结果	
0
1
2
3
4
5
6
7
8
9
2.2.2 迭代 tuple
>>> t =(1,2,3,4,5)
>>> for x in t:
	    print(t)

	
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
>>> for x in t:
	    t[:2]

	
(1, 2)
(1, 2)
(1, 2)
(1, 2)
(1, 2)
2.2.3迭代 dict

迭代key

>>> for key in d:
	    print(key)

	
a
b
c

迭代value

>>> for val in d.values():
	    print(val)

	
1
2
3

同时迭代key和value

>>> for k,v in d.items():
	print(k,v)

	
a 1
b 2
c 3
2.2.4 迭代字符串
>>> for ch in 'adc':
	print(ch)

	
a
d
c

最后,还有一个问题。如果要对List实现类似Java那样的下标循环怎么办?
Python内置的enumerate函数可以把一个List变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身

>>> for i,val in enumerate(['a','v','d']):
	print(i,val)

	
0 a
1 v
2 d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们使用Python编程语言时,切片(slicing)操作是一种非常常见和有用的技术。它可以用于从字符串、列表、元组和其他可迭代对象中提取出指定的部分。 切片操作的基本语法是`[start:stop:step]`,其中: - `start`:切片的起始位置索引(包含)。 - `stop`:切片的结束位置索引(不包含)。 - `step`:切片的步长,默认为1(可选参数)。 下面是一些切片操作的示例: **字符串切片:** ```python string = "Hello, World!" slice1 = string[7:12] # 提取 "World" slice2 = string[:5] # 提取 "Hello" slice3 = string[7:] # 提取 "World!" slice4 = string[::2] # 提取 "Hlo ol!" ``` **列表切片:** ```python my_list = [1, 2, 3, 4, 5] slice1 = my_list[1:4] # 提取 [2, 3, 4] slice2 = my_list[:2] # 提取 [1, 2] slice3 = my_list[3:] # 提取 [4, 5] slice4 = my_list[::2] # 提取 [1, 3, 5] ``` **元组切片:** ```python my_tuple = (1, 2, 3, 4, 5) slice1 = my_tuple[1:4] # 提取 (2, 3, 4) slice2 = my_tuple[:2] # 提取 (1, 2) slice3 = my_tuple[3:] # 提取 (4, 5) slice4 = my_tuple[::2] # 提取 (1, 3, 5) ``` 需要注意的是,切片操作返回的结果将是一个新的对象,而不是原始对象的引用。这意味着对切片进行的修改不会影响原始对象。 切片操作还可以用于反向提取元素,例如`string[::-1]`将返回一个反转的字符串。这是一个方便的方法来翻转字符串或列表。 希望这个简单的切片操作讲解对你有帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值