Skip to main content

python学习之路☞12.list slicing.md

python学习之路☞12.list slicing

#python, #data_structure, #list, #slicing, #shallow_copy,
切片代码的练习

'''
列表切片:对列表特定范围的元素截取并返回,本质是列表,起源于原始列表
结构:list_name[start : end : step]
    start (可选):开始切片的索引(包括该索引)。如果省略,默认为0。
    end (可选):结束切片的索引(不包括该索引)。如果省略,默认为列表的长度。
    step (可选):步长,指定元素之间的间隔。如果省略,默认为1。
    遵循左闭右开原则即 [start,end)
特点:修改列表切片对原始列表无影响
'''
# 创建列表
list_name1 = []
for i in range(1, 6):  # 使用 for 循环赋值
    list_name1.append(i)
list_name2 = list_name1  # 将赋值好的列表再次赋值给 list_name2 使其成为列表
print('打印list_name1列表:', list_name1, '打印list_name2列表:',
      list_name2)  # 打印 list_name1 和 list_name2 看看内容是否一致
list_name2[2] = 999  # 修改 list_name2 第三个元素
'''
可以发现 list_name1 和 list_name2 出于某些原因修改内容都会互相影响
此时使用切片,接可以避免这个情况
'''
print('修改list_name2列表后打印list_name1列表:', list_name1, '打印list_name2列表:',
      list_name2)  # 修改 list_name2 内容之后打印 list_name1 和 list_name2 看看内容是否一致

# 切片的获取
# list[:] 可获取列表全部的元素
list_name3 = list_name1[:]
list_name3[2] = 669  # 修改 list_name3 第三个元素
'''
修改 list_name3 内容之后打印 list_name1 list_name2 和 list_name3 看看内容是否一致
此时可以发现 list_name1 和 list_name2 出于某些原因不会因为修改了 list_name3 的内容互相影响
'''
print('修改list_name3列表后打印list_name1列表:', list_name1,
      '打印list_name2列表:', list_name2, '打印list_name3列表:', list_name3)
'''
除了 [:] 可以提取列表全部元素切片 还可以范围性提取列表元素作为切片
'''
# [start:stop:step] 全部用上
list_name4 = list_name1[1:-1:2]  # 截取索引范围[1,5)间隔为2 即第二到第五个元素范围间隔为2 即 [2,4]
print('此时list_name1[1:-1:2]得到的切片list_name4为:', list_name4)
# [:stop] 只有结束索引
list_name5 = list_name1[:3]  # 截取索引范围[0,3)间隔为1 即第一到第三个元素范围间隔为1 即 [1,2,999]
print('此时list_name1[:3]得到的切片list_name5为:', list_name5)
# [start:] 只有开始索引
list_name6 = list_name1[3:]  # 截取索引范围[3,5)间隔为1 即第四到第五个元素默范围认间隔为1 即 [4,5]
print('此时list_name1[3:]得到的切片list_name6为:', list_name6)

'''
练习:创建一个排名表,对排名表造假,分别让小月和小明都看到自己排第一的表让他们心里都开心
'''
print('--------练习:排名表造假修改排名表---------')
list_str_sort = ['小日', '小月', '小明']

list_str_sort1 = list_str_sort[:]  # 给 小月 创建切片
list_str_sort1[0] = list_str_sort[1]  # 将 小月 换到第一位
list_str_sort1[1] = list_str_sort[0]  # 将 小日 换到第二位

list_str_sort2 = list_str_sort[:]  # 给 小明 创建切片
list_str_sort2[0] = list_str_sort[2]  # 将 小明 换到第一位
list_str_sort2[2] = list_str_sort[0]  # 将 小日 换到第三位
print('原始排名表为:', list_str_sort)
print('给小月的排名表:', list_str_sort1)
print('给小明的排名表:', list_str_sort2)
'''
另外的元素交换方法,此时列表还原
这个交换很有意思
a,b=b,a
'''
print('    --------排名还原---------')
list_str_sort1[0], list_str_sort1[1] = list_str_sort1[1], list_str_sort1[0]
list_str_sort2[0], list_str_sort2[2] = list_str_sort2[2], list_str_sort2[0]
print('    原始排名表为:', list_str_sort)
print('    给小月的排名表:', list_str_sort1)
print('    给小明的排名表:', list_str_sort2)

参考

Slicing — Python 3 docs
Python List Slicing — python.land

Comments

Popular posts from this blog

python学习之路☞9.Comment, Primitive Data Types and Branch Conditional Structure if ... else ...

python学习之路☞9.Comment, Primitive Data Types and Branch / Conditional Structure if … else … #python,#Comment,#data type,#branch/conditional structure,#input(),#int,#float,#complex,#boolean,#if … else …, 注释(Comment) 内置函数input()(input() Function) 基本数据类型整数(Primitive Data Types int) 基本数据类型小数(Primitive Data Types float) 基本数据类型复数(Primitive Data Types complex) 基本数据类型布尔(Primitive Data Types boolean) 分支结构if … else …(Branch / Conditional Structure if … else …) 参考 Comment ''' 注释: 给人看的说明文字,Python 解释器完全忽略 要点 # 让该行 # 之后的内容全部失效,解释器跳过。 行尾注释与代码在同一行,通常用于简短说明。 docstring(三引号字符串)放在函数/类/模块第一行时,可被 help() 和文档工具读取,有特殊意义。 好的注释解释"为什么",而不是"做了什么"(代码本身已经说明了做了什么): # ✗ i = i + 1 # i 加 1 # ✓ i += 1 # 跳过表头行 ''' # 这是单行注释,# 号后面全部忽略 x = 10 # 行尾注释,代码照常执行 # 多行注释:每行都加 # # 第一行说明 # 第二行说明 # 第三行说明 """ 这是多行字符串(docstring) 虽然常被当注释用, 但本质是字符串字面量,不是注释。 通常用于函数/类的文档说明。 """ def add ( a , b ) : """返回 a 与 b 的和。"...

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git,#android16, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 开启全部必要扩展功能 下面的步骤是开启大部分非必要扩展功能 修补内核代码方案 下面的步骤是开启剩余部分非必要扩展功能 修补内核 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 安装用于校验的工具 开机自启动和容器化部署使用例子 Android16尝试开启KVM失败的例子(不用试了,唉) 内核修补 参考&感谢 gmkm6 x86_64 主机配置环境 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 听我说,编译内核是一件很枯燥的核对过程,这个过程需要考虑到各项之间的互相依赖和冲突并以此作出取舍 这不是个简单的过程,这里只展示具有逻辑的依赖项,需要耐心和不断的试错总结 不得不说设计的内核是一件件精美的艺术品,从某种意义上来讲,万事万物皆为艺术,而探索艺术本身是...

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 参考&感谢 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 最近 OP7P 设备型号是 guacamole 手机刷了 GM1910_11_H.40 即 android 12 https://gauss-componentotacostmanual-sg.allawnofs.com/remove-d74c973c240292cb011317bb07f424a2/component-ota/23/03/28/6d4604798d27450e8de05671d5effbae.zip 内核版本 4.14.180-perf+ 发现 github.com/OnePlusOSS 官方有相关的开放残缺的内核源码,但缺失了很多代码配置 https://github.com/OnePlusOSS/android_kernel_o...