Python Iteration 迭代知识概述

Python Iteration 迭代

1.基础内容

1) 什么是序列,如何用for循环遍历序列中的元素
序列是一种内置数据类型,用于表示一组有序的元素。常见的序列类型包括字符串、列表和元组。序列中的元素可以通过索引来访问,第一个元素的索引为 0
2)什么是累加器,如何用for循环和累加器变量来计算序列的和、平均值、最大值等
累加器是一种常用的编程模式,用于在循环中累积计算结果。累加器通常是一个变量,它在循环的每次迭代中都会被更新,以便在循环结束时保存最终的计算结果。

可以使用 for 循环和累加器变量来计算序列的和、平均值、最大值等。例如,在下面这个简单的例子中,我们使用 for 循环和累加器变量来计算一个列表中所有元素的和:

my_list = [1, 2, 3]
total = 0
for x in my_list:
    total += x
print(total) # 输出 6

在这个例子中,我们定义了一个累加器变量 total 并将其初始值设为 0。然后,在 for 循环中,我们遍历列表中的每个元素,并将其累加到 total 变量中。最后,在循环结束后,total 变量保存了列表中所有元素的和。

类似地,可以使用 for 循环和累加器变量来计算序列的平均值、最大值等。例如,在下面这个简单的例子中,我们使用 for 循环和累加器变量来计算一个列表中所有元素的平均值:

my_list = [1, 2, 3]
total = 0
count = 0
for x in my_list:
    total += x
    count += 1
average = total / count
print(average) # 输出 2.0

在这个例子中,我们定义了两个累加器变量:total 和 count。然后,在 for 循环中,我们遍历列表中的每个元素,并将其累加到 total 变量中,并将 count 变量递增1。最后,在循环结束后,我们使用公式 average = total / count 来计算列表中所有元素的平均值。

3)如何用range函数来生成一系列整数,以及range函数的参数和用法
range() 函数可以用来生成一系列整数。它接受一个或多个参数,用于指定要生成的整数范围。

①当 range() 函数只接受一个参数时,它会生成从 0 到该参数减 1 的整数序列。例如,range(3) 会生成序列 [0, 1, 2]。
②当 range() 函数接受两个参数时,第一个参数指定序列的起始值,第二个参数指定序列的结束值(不包括该值)。例如,range(1, 4) 会生成序列 [1, 2, 3]。
③当 range() 函数接受三个参数时,第三个参数指定序列中相邻元素之间的步长。例如,range(1, 6, 2) 会生成序列 [1, 3, 5]。
使用 range() 函数的例子:

# 使用一个参数
for i in range(3):
    print(i) # 输出 0 1 2

# 使用两个参数
for i in range(1,4):
    print(i) # 输出 1 2 3

# 使用三个参数
for i in range(1,6,2):
    print(i) # 输出 1 3 5

4)如何用for循环和索引来修改列表中的元素
我们使用 for 循环和索引来修改列表中的元素。通常,这可以通过结合使用 range() 函数和列表索引来实现。

例如,在下面这个简单的例子中,我们使用 for 循环和索引来将一个列表中的所有元素都乘以 2:

my_list = [1, 2, 3]
for i in range(len(my_list)):
    my_list[i] *= 2
print(my_list) # 输出 [2, 4, 6]

在这个例子中,我们使用 range(len(my_list)) 来生成一个包含所有有效索引的序列。然后,在 for 循环中,我们遍历这个序列,并使用循环变量 i 来访问列表中的每个元素。最后,在循环体内部,我们使用列表索引语法 my_list[i] 来修改列表中的元素。

2.重点回顾
  • for x in sequence: 循环语句,用于遍历序列中的每个元素,并将其赋值给变量x
  • accumulator = accumulator + x: 累加器模式,用于将每次循环中的元素与累加器变量相加,从而得到最终结果。(需要定义到for循环外,否则每次都会被重新赋值)
  • range(x): 函数,用于生成从0到x-1的整数序列
    1)range(a,b): 函数,用于生成从a到b-1的整数序列
    2)range(a,b,s): 函数,用于生成从a开始,以s为步长,直到b-1为止的整数序列
    (参看 https://www.runoob.com/python/python-func-range.html )
  • list[k] = list[k]+1: 列表修改语句,用于将列表中第k个元素增加1,也可写作list[k] += 1
  • for循环结构时候,对于List/Tuple是顺序循环值,对于Dict是循环每个键,Set是循环每个元素

1)当使用 for 循环遍历元组或列表时,循环变量会依次取遍历每个元素的值。

my_tuple = (1, 2, 3)
for x in my_tuple:
    print(x) # 输出 1 2 3

my_list = [1, 2, 3]
for x in my_list:
    print(x) # 输出 1 2 3

[扩展] 元组和列表的区别:从底层实现来看,列表和元组都采用了顺序表结构。列表底层实现是动态顺序表,其大小可以改变;而元组底层实现是静态顺序表,其空间一旦分配就不可改变。
①元组是不可变类型,这意味着一旦创建了一个元组,就不能再对它进行修改。而列表是可变类型,可以对其进行添加、删除和修改等操作。
②由于元组是不可变类型,所以它在某些方面比列表更安全。例如,在作为字典的键或集合的元素时,只能使用不可变类型。
③元组通常用来表示一组具有相关性的数据,例如一个人的姓名、年龄和性别。而列表则更多地用来表示一组相同类型但没有固定长度的数据。

2)当使用 for 循环遍历字典时,循环变量会依次取遍历字典的每个键(键是唯一的,因为采用了散列表)。如果需要同时访问键和值,可以使用 items() 方法。

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict:
    print(key) # 输出 a b c

for key, value in my_dict.items():
    print(key, value) # 输出 a 1 b 2 c 3

3)当使用 for 循环遍历集合时,循环变量会依次取遍历集合的每个元素(直接采用散列表,元素是唯一的不可变的;但set()集合是可变长的、无序的、有限集合;而frozenset()是不变长的、无序的)。

my_set = {1, 2, 3}
for x in my_set:
    print(x) # 输出 1 2 3
3.值得注意
  • 注意变量空间和函数的实参和形参

在 Python 中,函数定义时的参数称为形参,而函数调用时传入的参数称为实参。形参是在定义函数时给出的变量名,用来接收调用该函数时传入的值。实参是在调用函数时给出的具体值,它将被赋值给对应的形参。
例如,在下面这个简单的函数中,x 和 y 是形参:

def add(x, y):
    return x + y

当我们调用这个函数时,比如 add(3, 4),那么 3 和 4 就是实参。在这次调用中,实参 3 被赋值给了形参 x,实参 4 被赋值给了形参 y。

同时函数参数传递的方式取决于参数的类型。对于不可变类型(如数字、字符串和元组),它们的值是通过“传值调用”来传递的,这意味着在函数内部对这些参数进行修改时,不会影响到函数外部的变量。而对于可变类型(如列表和字典),它们是通过“传引用调用”来传递的,这意味着在函数内部对这些参数进行修改时,会影响到函数外部的变量。

def my_func(my_list):
    my_list.append(4)

x = [1, 2, 3]
my_func(x)
print(x) # 输出 [1, 2, 3, 4]

my_list 是形参,x 是实参。由于 x 是一个列表(可变类型),所以当我们在 my_func 函数内部对 my_list 进行修改时,实际上也就修改了 x。

  • 不能在遍历List时候同时修改它的内容(避免此问题是需要遍历其副本或者序号,然后进行修改)

在 Python 中,不建议在遍历列表的同时修改它的内容,因为这样做可能会导致意想不到的结果。当你遍历一个列表时,Python 会根据列表的索引来迭代每个元素。如果你在遍历过程中修改了列表的内容(比如添加或删除元素),那么列表的索引也会随之改变,这可能会导致某些元素被遗漏或重复遍历。

如果你需要在遍历列表的同时修改它的内容,可以考虑以下几种方法:
1)创建一个新列表来存储修改后的结果。
2)遍历原列表的副本(可以使用切片操作 my_list[:] 来创建一个副本),然后对原列表进行修改。
3)使用索引来遍历列表,而不是直接迭代每个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值