【python基础(三)】操作列表:for循环、正确缩进、切片的使用、元组

文章目录

  • [一. 遍历整个列表](#一. 遍历整个列表)
    • [1. 在for循环中执行更多操作](#1. 在for循环中执行更多操作)
    • [2. 在for循环结束后执行一些操作](#2. 在for循环结束后执行一些操作)
  • [二. 避免缩进错误](#二. 避免缩进错误)
  • [三. 创建数值列表](#三. 创建数值列表)
    • [1. 使用函数range()](#1. 使用函数range())
    • [2. 使用range()创建数字列表](#2. 使用range()创建数字列表)
    • [3. 指定步长。](#3. 指定步长。)
    • [4. 对数字列表执行简单的统计计算](#4. 对数字列表执行简单的统计计算)
    • [5. 列表解析](#5. 列表解析)
  • [五. 使用列表的一部分-切片](#五. 使用列表的一部分-切片)
    • [1. 切片](#1. 切片)
    • [2. 遍历切片](#2. 遍历切片)
    • [3. 复制列表(浅拷贝与深拷贝)](#3. 复制列表(浅拷贝与深拷贝))
    • [4. 元组](#4. 元组)

一. 遍历整个列表

py 复制代码
if __name__ == '__main__':
    magicians = ['alice', 'david', 'carolina']
    for magician in magicians:
        print(magician)

1. 在for循环中执行更多操作

py 复制代码
if __name__ == '__main__':
    magicians = ['alice', 'david', 'carolina']
    for magician in magicians:
        print(f"{magician.title()}, that was a great trick")
        

2. 在for循环结束后执行一些操作

在for循环后面,没有缩进的代码都只执行一次,不会重复执行。

py 复制代码
if __name__ == '__main__':
    magicians = ['alice', 'david', 'carolina']
    for magician in magicians:
        print(f"{magician.title()}, that was a great trick")
    print("Thank you。")

二. 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系。

简单地说,它要求你使用缩进让代码整洁而结构清晰。在较长的Python程序中,你将看到缩进程度各不相同的代码块,从而对程序的组织结构有大致的认识。

下面来看一些较为常见的缩进错误。

忘记缩进

对于位于for语句后面且属于循环组成部分的代码行,一定要缩进。

忘记缩进额外的代码行:

py 复制代码
  magicians = ['alice', 'david', 'carolina']
  for magician in magicians:
      print(f"{magician.title()}, that was a great trick!")
  print(f"I can't wait to see your next trick, {magician.title()}.\n") # 也需要进行缩进

不必要的缩进

函数调用print()(见❶)无须缩进,因为它并非循环的组成部分。

cpp 复制代码
  message = "Hello Python world!"
❶     print(message)

遗漏了冒号

for语句末尾的冒号告诉Python,下一行是循环的第一行。

py 复制代码
  magicians = ['alice', 'david', 'carolina']
❶ for magician in magicians
      print(magician)

如果不小心遗漏了冒号,如❶所示,将导致语法错误,因为Python不知道你意欲何为。

三. 创建数值列表

1. 使用函数range()

cpp 复制代码
for value in range(1, 5):
    print(value)

它不会打印5,只有1到4。

2. 使用range()创建数字列表

要创建数字列表,可使用函数list()将range()的结果直接转换为列表。

cpp 复制代码
numbers = list(range(1, 6))
print(numbers)

3. 指定步长。

为此,可给这个函数指定第三个参数,看一个例子:

打印1~10的偶数:

cpp 复制代码
even_numbers = list(range(2, 11, 2))
print(even_numbers)

创建一个列表,其中包含前10个整数(1~10)的平方

py 复制代码
  squares = []
  for value in range(1,11):
❶     squares.append(value**2)

  print(squares)

4. 对数字列表执行简单的统计计算

最小、最大、总和。

cpp 复制代码
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45

本节使用的数字列表都很短,但这里介绍的知识也适用于包含数百万个数的列表。

5. 列表解析

列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素

cpp 复制代码
squares = [value**2 for value in range(1, 11)]
print(squares)

五. 使用列表的一部分-切片

处理列表的部分元素,Python称之为切片。

1. 切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range()一样,Python在到达第二个索引之前的元素后停止。

cpp 复制代码
  players = ['charles', 'martina', 'michael', 'florence', 'eli']
❶ print(players[0:3])

# ['charles', 'martina', 'michael']

如果没有指定第一个索引,Python将自动从列表开头开始:

cpp 复制代码
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])

如果要提取从第三个 元素到列表末尾的所有元素,可将起始索引指定为2,并省略终止索引:

cpp 复制代码
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])

如果要输出名单上的最后三名队员,可使用切片players[-3:]:

cpp 复制代码
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

2. 遍历切片

遍历前三名队员,并打印他们的名字:

cpp 复制代码
  players = ['charles', 'martina', 'michael', 'florence', 'eli']

  print("Here are the first three players on my team:")
❶ for player in players[:3]:
      print(player.title())

3. 复制列表(浅拷贝与深拷贝)

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。

py 复制代码
❶ my_foods = ['pizza', 'falafel', 'carrot cake']
❷ friend_foods = my_foods[:]

  print("My favorite foods are:")
  print(my_foods)

  print("\nMy friend's favorite foods are:")
  print(friend_foods)

如果只是将my_foods赋给friend_foods,就不能得到两个列表。

py 复制代码
  my_foods = ['pizza', 'falafel', 'carrot cake']

  # 这行不通:
❶ friend_foods = my_foods

  my_foods.append('cannoli')
  friend_foods.append('ice cream')

  print("My favorite foods are:")
  print(my_foods)

  print("\nMy friend's favorite foods are:")
  print(friend_foods)
  
  
  # My favorite foods are:
# ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

# My friend's favorite foods are:
# ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

这种语法实际上是让Python将新变量friend_foods关联到已与my_foods相关联的列表,因此这两个变量指向同一个列表。类似于浅拷贝。

4. 元组

Python将不能修改的值称为不可变的,而不可变的列表被称为元组。

定义元组

元组看起来很像列表,但使用圆括号而非中括号来标识。

定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。

cpp 复制代码
❶ dimensions = (200, 50)
❷ print(dimensions[0])
  print(dimensions[1])
cpp 复制代码
dimensions = (200, 50)
for dimension in dimensions:
    print(dimension)

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:

cpp 复制代码
❶ dimensions = (200, 50)
  print("Original dimensions:")
  for dimension in dimensions:
      print(dimension)

❷ dimensions = (400, 100)
❸ print("\nModified dimensions:")
  for dimension in dimensions:
      print(dimension)

如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。

参考:《Python编程:从入门到实践(第二版)》

相关推荐
学步_技术1 分钟前
Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图
开发语言·python·抽象工厂模式
wn53125 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
Narutolxy35 分钟前
Python 单元测试:深入理解与实战应用20240919
python·单元测试·log4j
Hello-Mr.Wang37 分钟前
vue3中开发引导页的方法
开发语言·前端·javascript
救救孩子把40 分钟前
Java基础之IO流
java·开发语言
WG_1741 分钟前
C++多态
开发语言·c++·面试
宇卿.1 小时前
Java键盘输入语句
java·开发语言
Amo Xiang1 小时前
2024 Python3.10 系统入门+进阶(十五):文件及目录操作
开发语言·python
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
friklogff1 小时前
【C#生态园】提升C#开发效率:深入了解自然语言处理库与工具
开发语言·c#·区块链