自学Python第六课:操作列表(2)

接着上篇继续学习,本篇文章让我们一起学习切片、元组、设置代码格式。

切片

什么是切片

什么是切片
可以处理列表的部分元素 -- Python 称之为切片

要创建切片,可指定要使用的第一个元素的索引和最后一个元素的索引加1。与函数range() 一样,Python 在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引0~3,输出0、1和2的元素。

切片基础 — [起点:终点]

记住铁律:终点那个下标不取(和 range 一样"差一位")。

players = ["甲","乙","丙","丁","戊"]   
      下标: 0    1    2    3    4

players[0:3]  → 下标0,1,2 → ['甲','乙','丙']   # 终点3不取!
players[1:4]  → 下标1,2,3 → ['乙','丙','丁']
players[:3]   → 起点省=从头 → ['甲','乙','丙']
players[2:]   → 终点省=到尾 → ['丙','丁','戊']
players[-3:]  → 负数从末尾数 → 最后三个 ['丙','丁','戊']

遍历切片

其实就是把"切片"放进 for 里——只循环列表的一部分,而不是全部。因为切片本身是个新列表,for 就只遍历这个新列表里的元素。

for 变量 in 列表[起点:终点]:    # 循环体只对切片那段执行

复制列表

复制列表就一个核心坑:想复制必须"真复制",否则俩变量其实是同一个列表。

✅ 真复制(推荐用 [:]

food_a = ["火锅", "烧烤"]
food_b = food_a[:]     # 独立副本
food_a.append("串串")
food_b.append("奶茶")
# food_a = ['火锅','烧烤','串串']
# food_b = ['火锅','烧烤','奶茶']  互不影响

❌ 假复制(直接 =

num_a = ["1", "2"]
num_b = num_a          # 只是给同一个列表起了第二个名字
num_a.append("3")
# num_b 也变成 ['1','2','3']  ← 跟着变了!

那么,我们怎么一眼看出是不是同一个列表?看 id()

x = [1, 2, 3]
y = x[:]     # 真复制 → id 和 x 不同
z = x        # 假复制 → id 和 x 相同

输出里 y 的 id 和 x 不一样(真复制),z 的 id 跟 x 一模一样(同一个列表)。id 相同 = 同一份数据。

还有 copy() 也能真复制:

n = m.copy()   # 和 m[:] 效果完全一样,都是独立副本
一句话:复制列表用 新 = 旧[:] 或 新 = 旧.copy();千万别写 新 = 旧,那样俩变量共用一份,改一个另一个也变。

元组

什么是元组

什么是元组
核心就一句话:元组是"改不了内容的列表"。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

定义 - 圆括号()

dimensions = (200, 50)    # 注意是 () 不是 []
print(dimensions[0])      # 取元素还是用 [],和列表一样

取元素、遍历都跟列表一模一样,区别只在"能不能改"。

遍历元组中的所有值

和列表一样用 for

for d in dimensions:
    print(d)

不能改单个值

dimensions[0] = 250   # 报错:'tuple' object does not support item assignment

列表 lst[0] = 250 没问题,但元组这样写就报错——这是它和列表最本质的区别

但能"整个重新赋值"

dimensions = (400, 100)   # 允许,整组换掉

不是改里面的某个数,而是把整个变量指向一个全新的元组。

一句话:元组用 (),取值/遍历跟列表一样,但不能改单个元素;想换就整组重新赋值。它的价值是"防手滑改掉不该改的数据"。

设置代码格式

"代码写成什么样才规范好读",不跑逻辑、跑的是规范

格式为什么重要

代码是被阅读的次数,远多于被编写的次数。你写给人看、也写给未来的自己看,格式乱了以后自己都看不懂。

缩进 — 每级 4 个空格

  • 用 4 个空格,别用 Tab 键,更别 Tab 和空格混用(前面 4.1.4 讲过,混用会报缩进错)。
  • 你用 VS Code /PyCharm等敲代码,默认敲 Tab 会被自动转成 4 个空格,放心用。

行长 — 每行不超过 79 字符

  • 一行太长(比如一行 200 字)要横着拖滚动条,很难受。
  • 太长就用括号换行,续行要缩进对齐,像文件里 average_temp = (...) 那样。
  • 注释也别写太长,该换行就换行。

空行 — 像文章分段一样

  • 函数之间空两行(文件里 greet_user 和 describe_operation 之间)。
  • 函数内部的逻辑块之间空一行,让结构清楚。

其他常用规范

  • 运算符两侧各留一个空格:total = sum(numbers)(别写 total=sum(numbers)
  • 逗号后面留空格:[1, 2, 3](别写 [1,2,3]

好格式 vs 坏格式 对比

# 坏格式:无空行、没空格、一行超长、Tab空格混用
def f(x):return x*2
magicians=["甲","乙","丙"]
for m in magicians:print(m)

# 好格式:缩进4空格、运算符留空、函数间空行、行长适中
def double(x):
    return x * 2

magicians = ["甲", "乙", "丙"]
for m in magicians:
    print(m)
两边都能运行,但坏格式读起来费劲、改起来容易出错。规范不是为了好看,是为了不容易写错、别人能看懂
一句话:4 空格缩进、行长 ≤79、空行分段、符号留空 —— 这就是 PEP 8 的几条核心,跟着做代码就清爽规范。

根据《Python编程从入门到实践》这本书的第四章,也就是这两篇文章就学习完了。我们一起学习了如何高效处理列表中的元素;如何使用for循环遍历列表;如何根据缩进来确定程序的结构和如何避免错误出现;如何创建简单的数字列表以及对数字列表执行的一些操作;如何切片等等内容。看着很多,听着很累。但是在往后学学,这些内容就很好理解了,加油吧!

上一篇 自学Python第五课:操作列表(1)

与「遗落时光」交流

看完这篇有收获?欢迎联系作者,一起聊技术、提建议~

公众号 Q 加QQ 加微信 发邮件