【Python】Python中的切片各种情况分析(注释最多、场景最全)

两种基本索引

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

注意a列表的下标索引序列有两种,非负索引系列是0到9,负索引系列-10到-1。索引下标的有效范围是-10到9,只要下标在这个范围都是合法的。
在实际切片时,如果出现了两种索引系列,可以秉承统一度量衡的原则,非负索引与负索引相互转换。
负索引 = 非负索引 - 序列对象长度
非负索引 = 负索引 + 序列对象长度

索引之间的转换

"""
1、从下面例子理解两种索引系列之间的转换
"""
# -1索引下标转换为正索引为9,
# -5索引下标转换为正索引为5,
# 5索引下标转换为负索引为-5,
# 9索引下标转换为负索引为-1,
# 以下四个例子均等价于a[5:9]
print(a[5:9])
print(a[5:-1])
print(a[-5:9])
print(a[-5:-1])

[5, 6, 7, 8]
[5, 6, 7, 8]
[5, 6, 7, 8]
[5, 6, 7, 8]

超出索引范围的情况

"""
从下面的例子举例说明切片时索引超过有效范围后的效果。也可以利用第一阶段将的"统一度量衡",
如果起始索引和终止索引是用不同的索引系列,则统一为同一索引系列后再分析。
超过索引范围的分析转换步骤如下
 1、超出范围的索引如果非负的话改为len(a),如果负的话改为-len(a)
 2、统一度量衡,全部采用非负索引系列

"""
print('-' * 10)
# a列表有效索引范围是-10到9的整数,
# 那么从5到100的整数递增的过程中索引值无效的元素取值为空,
# 于是索引值有效的是5 6 7 8 9,
# 所以等价于a[5:len(a)]
print(a[5:100])
print(a[5:len(a)])
print('-' * 10)

# a列表有效索引范围是-10到9的整数,
# 那么从-100到-5的整数递增的过程中索引值无效的元素取值为空,
# 于是索引值有效的是-10 -9 -8 -7 -6,
# 所以等价于a[-len(a):-5] 转换为非负索引表示为a[0:5]
print(a[-100:-5])
print(a[-len(a):-5])
print(a[-len(a) + len(a):-5 + len(a)])
print('-' * 10)

# a列表有效索引范围是-10到9的整数,
# 那么从-5到100的整数递增的过程中索引值无效的元素取值为空,
# 因为索引值-5对应的非负索引值为-5+len(a)=5
# 所以等价于a[-5:len(a)] 转换为非负索引表示为a[5:10]
print(a[-5:100])
print(a[-5:len(a)])
print(a[-5 + len(a):len(a)])
print('-' * 10)


# a列表有效索引范围是-10到9的整数,
# 那么从-100到5的整数递增的过程中索引值无效的元素取值为空,
# 于是索引值有效的是-10 -9 -8 -7 -6,
# 所以等价于a[-len(a):5] 转换为非负索引表示为a[0:5]
print(a[-100:5])
print(a[-len(a):5])
print(a[-len(a) + len(a):5])
print('-' * 10)

print(a[-100:100])
print(a[-len(a):len(a)])
print(a[-len(a) + len(a):len(a)])
print('-' * 10)

print(a[100:1000])
print(a[len(a):len(a)])
print('-' * 10)

print(a[-1000:-100])
print(a[-len(a):-len(a)])
print(a[-len(a) + len(a):-len(a) + len(a)])
print('-' * 10)

[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
----------
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
----------
[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
----------
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
----------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
----------
[]
[]
----------
[]
[]
[]
----------

起始索引大于终止索引时

print(a[6:5])
print(a[-4:5])
print(a[6:-5])
print(a[-4:-5])
print('-' * 10)
[]
[]
[]
[]
----------

起始索引和终止索引缺省

"""
起始索引和终止索引缺省时的情况
start的缺省值是无穷小(​),stop的缺省值是无穷大(​)
"""

print(a[:5])
print(a[5:])
print(a[100:])
print('-' * 10)

[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[]
----------

拓展切片

"""
拓展切片
指的是这样的切片形式:a[start:stop:step],其中step是一个非零整数,
即比简单切片多了调整步长的功能,此时切片的行为可概括为:
从start对应的位置出发,以step为步长索引序列,直至越过stop对应的位置,
且不包括stop本身。事实上,简单切片就是step=1的扩展切片的特殊情况。需要详细解释的是step分别为正数和负数的两种情况。

"""

# step为正数 无缺省 此种情况较容易理解
# 以下四组条代码是同一个效果
print(a[2:6:2])
print(a[-8:-4:2])
print(a[2:-4:2])
print(a[-8:6:2])
print('-' * 10)

# step为正数 缺省 此种情况较容易理解
# 以下两组组条代码是同一个效果
print(a[:6:2])
print(a[:-4:2])
print('-' * 10)

# 以下两组组条代码是同一个效果
print(a[2::2])
print(a[-8::2])
print('-' * 10)

# 以下两组组条代码是同一个效果
print(a[::2])
print(a[0:len(a):2])
print('-' * 10)

# step为负数 无缺省 步长为负数,表示逆序截取,转换后是同一索引系列后保证start>end, 否则取到的子字符串为空。
# 以下四条代码是同一个效果,把索引统一为非负索引后发现start<end 执行结果为空
print(a[2:6:-2])
print(a[-8:-4:-2])
print(a[2:-4:-2])
print(a[-8:6:-2])
print('-' * 10)

# 以下四条代码是同一个效果,把索引统一为非负索引后发现start>end 执行结果为从起始到终止从右往左方向的的序列
print(a[6:2:-2])
print(a[-4:2:-2])
print(a[6:-8:-2])
print(a[-4:-8:-2])
print('-' * 10)


# step为负数 缺省
# 缺省起始索引,起始索引填充正无穷,
# 缺省终止索引,终止索引填充负无穷,
# 以下两条代码是同一个效果
print(a[:6:-2])
print(a[:-4:-2])
print('-' * 10)

# 以下两组组条代码是同一个效果
print(a[2::-2])
print(a[-8::-2])
print('-' * 10)

#
print(a[::-2])
print('-' * 10)

[2, 4]
[2, 4]
[2, 4]
[2, 4]
----------
[0, 2, 4]
[0, 2, 4]
----------
[2, 4, 6, 8]
[2, 4, 6, 8]
----------
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
----------
[]
[]
[]
[]
----------
[6, 4]
[6, 4]
[6, 4]
[6, 4]
----------
[9, 7]
[9, 7]
----------
[2, 0]
[2, 0]
----------
[9, 7, 5, 3, 1]
----------
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 设置文可以使用以下方法: 1. 使用 utf-8 编码: 在 Python 源代码的第一行或者第二行加入 `# -*- coding: utf-8 -*-` 即可。 2. 使用字符串前缀: 在字符串前面加上 `u` 或者 `b` 前缀即可。例如: ``` u'文' b'文' ``` 3. 使用其他编码: 可以使用 Python 的 `decode` 和 `encode` 方法将字符串从其他编码转换为 utf-8 编码。例如: ``` '文'.decode('gbk').encode('utf-8') ``` 请注意, 上述方法需要根据实际情况进行选择使用。 此外, 还可以在 Python 程序输出文, 可以使用以下方法: 1. 使用 utf-8 编码: 在输出字符串之前加上 `u` 前缀即可。例如: ``` print(u'文') ``` 2. 使用字符串转义: 可以使用 Python 的字符串转义功能输出文。例如: ``` print('\u4e2d\u6587') ``` 3. 使用其他编码: 可以使用 Python 的 `decode` 和 `encode` 方法将字符串从其他编码转换为 utf-8 编码后输出。例如: ``` print('文'.decode('gbk').encode('utf-8')) ``` 请注意, 上述方法需要根据实际情况进行选择使用。 ### 回答2: 要在Python3.6设置文,可以按照以下步骤进行: 1. 在代码文件的开头添加以下注释行,以指定文件的编码格式为UTF-8: ```python # -*- coding: utf-8 -*- ``` 2. 在需要输出文的地方,可以使用Unicode编码将文转换为字符串,并使用`print()`函数进行输出。例如: ```python print("文") ``` 3. 如果需要读取或处理包含文的文本文件,可以使用Python3的`open()`函数打开文件,并指定文件编码为UTF-8。例如: ```python with open('文件路径', 'r', encoding='utf-8') as file: content = file.read() ``` 4. 如果需要在Python3.6处理文字符串,可以使用字符串的各种操作方法和函数,例如切片、拼接、查找和替换等。 需要注意的是,在使用文字符时,确保使用的编辑器也设置为UTF-8编码,以避免出现乱码问题。同时,还要确保系统环境安装了相应的文字符集。 总结起来,要在Python3.6设置文,需要确保源代码文件、输出和处理的文本文件都使用UTF-8进行编码,并在代码明确指定编码格式。这样就可以正常地表示、输出和处理文字符了。 ### 回答3: 在Python3.6,要设置文首先需要确保在你的操作系统已经安装了文字体库。然后,可以按照下面几个步骤进行设置: 1. 在Python脚本文件的开头,添加以下代码: ```python # -*- coding: utf-8 -*- ``` 这行代码是为了指定Python源文件采用UTF-8编码。 2. 在需要使用文的地方,可以使用Unicode字符串表示文。例如: ```python msg = '你好,世界!' print(msg) ``` 3. 如果在控制台输出文时出现乱码,可以使用sys模块来调整控制台的编码方式。可以添加以下代码: ```python import sys sys.stdout.encoding='utf-8' ``` 这样就能确保在控制台输出文时能正确显示。 请注意,以上仅为基本设置。如果在具体的应用场景涉及到更复杂的文处理,还可能需要使用第三方库如jieba、wordcloud等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值