分享免费的编程资源和教程

网站首页 > 技术教程 正文

Python 0-5 循环语句和列表元组

goqiw 2024-11-22 14:51:05 技术教程 23 ℃ 0 评论


一、for循环

在Python中,循环语句分为while循环和for循环两种,前文已经对while循环进行了基本详细的讲解,本节介绍 for 循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。

for 循环的语法格式如下:

for 迭代变量 in 字符串|列表|元组|字典|集合:
    代码块

或者:

for 变量 in 迭代的对象:
    代码块

格式中,变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对变量手动赋值;要迭代的对象包含“字符串|列表|元组|字典|集合”;代码块指的是具有相同缩进格式的多行代码(和 while 一样),由于和循环结构联用,因此代码块又称为循环体字符串|列表|元组|字典|集合

(一)range内置函数

但通常来说,我们学的Python基础中关于for循环的内容,基本上只会用到一种格式:

for i in range():
    代码块

range是一个内置函数,其功能是获取一个范围内的整数。所以在for i in range()中,range后面的括号代表的便是range内置函数的功能。

而关于range后面括号的使用,按照我的方法,在括号内总共是有着3个参数,都可以修改。

for i in range(X1,X2,X3):
    代码块

在上面的代码中,range后面括号里的“X1,X2,X3”分别代表了for循环内置函数range可修改的3个参数。需要注意的是,这三个参数只能依次实现修改,不能越过某个参数修改另一个参数,也就是说,如果你需要修改3个参数的以解决需求的话,你只能依次修改“X1,X2,X3”。同时,修改不同参数,致使的结果也不尽相同。

但根据所要实现功能的需求来修改需要的参数,有的功能实现不需要修改所有参数,可以只修改一个参数,也可以修改两个参数。如:

for i in range(1,10):
    print(i)

运行结果为:


如果需要修改3个参数,则代码如下:

for i in range(1,10,2):
    print(i)

运行结果为:

可以看见,同只修改2个参数的for循环来说,修改3个参数的剔除了“2,4,6,8”等数字。那么,究竟第三个参数表示了什么功能才能让修改3个参数的for循环剔除这些偶数呢?这就涉及了3个参数的不同用法。

1.用法1(只修改一个参数):

在内置函数range中,若只修改一个参数的话,这个参数属于但不包含你所修改的数据,而且默认开头是0。比如:

for i in range(10):
    print(i)

当你只修改一个参数时,你所打印出的数据将以0开头,前提是你修改的数据得是大于0的正整数。若你所修改的数据为负,你将打印不出任何东西;当你修改的数据为小数,那在运行时便会报错。

上面的代码打印的结果为:


2.用法2(只修改两个参数):

当你修改两个参数时,第一个参数默认为开头,开头会包含你所修改的参数数据本身;第二个参数则默认为结尾,结尾不会包含你所修改的参数数据本身。也即:

for i in range(-9,10):
    print(i)

需要注意的是,当你修改两个参数时,第一个参数可以为任何整数(负整数,0以及正整数)。而打印出来的结果也将以你修改的第一个参数的数据本身为开头,比如上面代码的运行结果为:

3.用法3(修改3个参数):

当你修改参数时,你会发现你所打印出来的结果会比只修改2个参数以及1个参数少了些结果,这是由于你修改的第三个参数所代表的功能带来的后果。当然,当第三个参数的修改也有某些限制,比如不能修改为负数,否则会没有打印结果;也不能修改为0,否则会报错。除此之外,第三个参数可以修改成任意大于等于1的正整数。

例如:

for i in range(-9,10,2):
    print(i)

运行结果为:

从运行的结果看,我们会发现,较于只修改了两个参数的用法2示例,用法3示例打印出的结果与结果之间少了一个数。为什么会少一个数呢?这便是由于第三个参数修改为2的缘故。

在range内置函数中,第三个参数代表的是步长step,也即俩个整数之间相差的数。又因为俩个整数之间本就相差1的缘故,所以当第三个参数修改成1的时候,结果与不修改第三个参数的结果会是一致的。


(二)for循环实例:

下面的程序演示了 for 循环的具体用法:

add = "http://c.biancheng.net/python/"
#for循环,遍历 add 字符串
for ch in add:
    print(ch,end="")

运行结果为:

http://c.biancheng.net/python/

可以看到,使用 for 循环遍历 add 字符串的过程中,迭代变量 ch 会先后被赋值为 add 字符串中的每个字符,并代入循环体中使用。只不过例子中的循环体比较简单,只有一行输出语句。

Python for循环的具体应用

实例1 for循环实现从1到100的数值累加:

print("计算 1+2+...+100 的结果为:")
number=0
for i in range(101):
    number+=i
print(number)

运行结果为:

计算 1+2+...+100 的结果为:
5050

上面代码中,使用了 range() 函数,此函数是 Python 内置函数,用于生成一系列连续整数,多用于 for 循环中。

实例2 for循环实现九九乘法表:

for i in range(1,10):
    for j in range(1,i+1):
        print(f'{i}*{j}={i*j}',end='\t')
    print()

运行结果为:

1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

在for循环实现九九乘法表中,特别要注意的是两个变量之间的取值关系。可以见到,第二个for循环的变量的取值范围为(1,i+1),但为什么要是i+1,不能跟第一个变量一样是10呢?

见下面代码:

for i in range(1,10):
    for j in range(1,10):
        print(f'{i}*{j}={i*j}',end='\t')
    print()

运行结果为:

1*1=1	1*2=2	1*3=3	1*4=4	1*5=5	1*6=6	1*7=7	1*8=8	1*9=9	
2*1=2	2*2=4	2*3=6	2*4=8	2*5=10	2*6=12	2*7=14	2*8=16	2*9=18	
3*1=3	3*2=6	3*3=9	3*4=12	3*5=15	3*6=18	3*7=21	3*8=24	3*9=27	
4*1=4	4*2=8	4*3=12	4*4=16	4*5=20	4*6=24	4*7=28	4*8=32	4*9=36	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	5*6=30	5*7=35	5*8=40	5*9=45	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	6*7=42	6*8=48	6*9=54	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	7*8=56	7*9=63	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	8*9=72	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

俩个变量取值一样的话,即使在代码中添加制表符“\t”,所打印的结果也不能如前者一样变成表格式结果。这是因为如果俩个变量取值一样,那么俩个变量相乘便会有162种结果,就像中学数学中的统计内容一样。

那么为什么只能是第二个变量取值要与第一个变量挂钩,而不是第一个变量取值与第二个变量挂钩呢?答案也是显而易见的,因为Python是从上而下、一行一行代码执行的编程,如果第一个变量取值与第二个变量挂钩,在程序运行时,便会出现未给第二个变量定义的错误提示。

二、break语句

在执行 while 循环或者 for 循环时,只要循环条件满足,程序将会一直执行循环体,不停地转圈。但在某些场景,我们可能希望在循环结束前就强制结束循环,Python 提供了 2 种强制离开当前循环体的办法:

  1. 使用 continue 语句,可以跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
  2. 只用 break 语句,可以完全终止当前循环。

break 语句可以立即终止当前循环的执行,跳出当前所在的循环结构。无论是 while 循环还是 for 循环,只要执行 break 语句,就会直接结束当前正在执行的循环体。

这就好比在操场上跑步,原计划跑 10 圈,可是当跑到第 2 圈的时候,突然想起有急事要办,于是果断停止跑步并离开操场,这就相当于使用了 break 语句提前终止了循环。
break 语句的语法非常简单,只需要在相应 while 或 for 语句中直接加入即可。例如:

add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
# 一个简单的for循环
for i in add:
    if i == ',' :
        #终止循环
        break
    print(i,end="")
print("\n执行循环体外的代码")

运行结果为:

http://c.biancheng.net/python/
执行循环体外的代码

分析上面程序不难看出,当循环至 add 字符串中的逗号( , )时,程序执行 break 语句,其会直接终止当前的循环,跳出循环体。

重点:break 语句一般会结合 if 语句进行搭配使用,表示在某种条件下跳出循环体。

注意,通过前面的学习我们知道,for 循环后也可以配备一个 else 语句。这种情况下,如果使用 break 语句跳出循环体,不会执行 else 中包含的代码。举个例子:

add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
for i in add:
    if i == ',' :
        #终止循环
        break
    print(i,end="")
else:
    print("执行 else 语句中的代码")
print("\n执行循环体外的代码")

程序执行结果为:

http://c.biancheng.net/python/
执行循环体外的代码

从输出结果可以看出,使用 break 跳出当前循环体之后,该循环后的 else 代码块也不会被执行。但是,如果将 else 代码块中的代码直接放在循环体的后面,则该部分代码将会被执行。
另外,对于嵌套的循环结构来说,break 语句只会终止所在循环体的执行,而不会作用于所有的循环体。举个例子:

add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
for i in range(3):
    for j in add:
        if j == ',':
            break   
        print(j,end="")
    print("\n跳出内循环")

程序执行结果为:

http://c.biancheng.net/python/
跳出内循环
http://c.biancheng.net/python/
跳出内循环
http://c.biancheng.net/python/
跳出内循环

分析上面程序,每当执行内层循环时,只要循环至 add 字符串中的逗号( , )就会执行 break 语句,它会立即停止执行当前所在的内存循环体,转而继续执行外层循环。
那么读者可能会问,在嵌套循环结构中,如何同时跳出内层循环和外层循环呢?最简单的方法就是借用一个 bool 类型的变量。
修改上面的程序:

add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
#提前定义一个 bool 变量,并为其赋初值
flag = False
for i in range(3):
    for j in add:
        if j == ',':
            #在 break 前,修改 flag 的值
            flag = True
            break   
        print(j,end="")
    print("\n跳出内循环")
    #在外层循环体中再次使用 break
    if flag == True:
        print("跳出外层循环")
        break

可以看到,通过借助一个 bool 类型的变量 flag,在跳出内循环时更改 flag 的值,同时在外层循环体中,判断 flag 的值是否发生改动,如有改动,则再次执行 break 跳出外层循环;反之,则继续执行外层循环。
因此,上面程序的执行结果为:

http://c.biancheng.net/python/
跳出内循环
跳出外层循环

当然,这里仅跳出了 2 层嵌套循环,此方法支持跳出多层嵌套循环。

三、continue语句

和 break 语句相比,continue 语句的作用则没有那么强大,它只会终止执行本次循环中剩下的代码,直接从下一次循环继续执行。
仍然以在操作跑步为例,原计划跑 10 圈,但当跑到 2 圈半的时候突然接到一个电话,此时停止了跑步,当挂断电话后,并没有继续跑剩下的半圈,而是直接从第 3 圈开始跑。
continue 语句的用法和 break 语句一样,只要 while 或 for 语句中的相应位置加入即可。例如:

add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
# 一个简单的for循环
for i in add:
    if i == ',' :
        # 忽略本次循环的剩下语句
        print('\n')
        continue
    print(i,end="")

运行上面的程序,将看到如下运行结果:

http://c.biancheng.net/python/
http://c.biancheng.net/shell/

可以看到,当遍历 add 字符串至逗号( , )时,会进入 if 判断语句执行 print() 语句和 continue 语句。其中,print() 语句起到换行的作用,而 continue 语句会使 Python 解释器忽略执行第 8 行代码,直接从下一次循环开始执行。

四、列表推导表达式

列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。
列表推导式的语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。
通过列表推导式的语法格式,明显会感觉到它和 for 循环存在着某些关联。其实,除去 [if 条件表达式] 部分,其余各部分的含义以及执行顺序和 for 循环是完全一样的(表达式其实就是 for 循环中的循环体),即它的执行顺序如下所示:

for 迭代变量 in 可迭代对象
    表达式

初学者可以这样认为,它只是对 for 循环语句的格式做了一下简单的变形,并用 [] 括起来而已,只不过最大的不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。
例如如下代码(程序一):

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)

上面代码的第 3 行会对 a_range 执行迭代,由于 a_range 相当于包含 10 个元素,因此程序生成的 a_list 同样包含 10 个元素,且每个元素都是 a_range 中每个元素的平方(由表达式 x*x 控制)。
运行上面代码,可以看到如下输出结果:

[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]

不仅如此,我们还可以在列表推导式中添加 if 条件语句,这样列表推导式将只迭代那些符合条件的元素。例如如下代码:

b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)

第一行代码与程序一中第 3 行代码大致相同,只是为这里给列表推导式增加了 if 条件语句,这会导致推导式只处理 range 区间的偶数,因此程序生成的 b_list 只包含 5 个元素。
运行上面代码,可以看到如下输出结果:

[0 ,4 , 16, 36, 64]

另外,以上所看到的列表推导式都只有一个循环,实际上它可使用多个循环,就像嵌套循环一样。例如如下代码:

d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)

上面代码中,x 是遍历 range(5) 的迭代变量(计数器),因此该 x 可迭代 5 次;y 是遍历 range(4) 的计数器,因此该 y 可迭代 4 次。因此,该(x,y)表达式一共会迭代 20 次。上面的 for 表达式相当于如下嵌套循环:

dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))

运行上面代码,可以看到如下输出结果:

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

当然,也支持类似于三层嵌套的 for 表达式,例如如下代码:

e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# e_list列表包含120个元素
print(e_list)

对于包含多个循环的 for 表达式,同样可指定 if 条件。假如我们有一个需求:程序要将两个列表中的数值按“能否整除”的关系配对在一起。比如 src_a 列表中包含 30,src_b 列表中包含 5,其中 30 可以整除 5,那么就将 30 和 5 配对在一起。对于上面的需求使用 for 表达式来实现非常简单,例如如下代码:

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要y能整除x,就将它们配对在一起
result = [(x, y) for x in src_b for y in src_a if y % x == 0]
print(result)

运行上面代码,可以看到如下输出结果:

[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]

五、序列(列表list和元组tuple)

所谓序列,指的是一种包含多项数据的数据结构,序列包含的多个数据项(也叫成员)按顺序排列,可通过索引来访问成员。
Python 的常见序列类型包括字符串、列表和元组。前章介绍过的字符串,其实就是一种常见的序列,通过索引访问字符串内的字符程序就是序列的示范程序。
序列主要是指列表和元组,这两种类型看起来非常相似,最主要的区别在于:元组是不可变的,元组一旦构建出来,程序就不能修改元组所包含的成员(就像字符串也是不可变的,程序无法修改字符串所包含的字符序列);但列表是可变的,程序可以修改列表所包含的元素。
在具体的编程过程中,如果只是固定地保存多个数据项,则不需要修改它们,此时就应该使用元组;反之,就应该使用列表。此外,在某些时候,程序需要使用不可变的对象,比如 Python 要求字典的 key 必须是不可变的,此时程序就只能使用元组。

简单讲,列表和元组的关系就是可变和不可变的关系。

1.创建列表和元组:

创建列表和元组的语法也有点相似,区别只是创建列表使用方括号,创建元组使用圆括号,并在括号中列出元组的元素,元素之间以英文逗号隔开
创建列表的语法格式如下:

[ele1,ele2,ele3,...]

创建元组的语法格式如下:

(ele1,ele2,ele3,...)

下面代码示范了在程序中定义列表和元组:

a_tuple = ('crazyit', 20, 5.6, 'fkit', -17)
# 访问第1个元素
print(a_tuple[0]) # crazyit
# 访问第2个元素
print(a_tuple[1]) # 20
# 访问倒数第1个元素
print(a_tuple[-1]) # -17
# 访问倒数第2个元素
print(a_tuple[-2]) # fkit

2.列表和元组切片:

与前面介绍的字符串操作类似的是,列表和元组同样也可使用索引获取中间一段,这种用法被称为 slice(分片或切片)。slice 的完整语法格式如下:

[start : end : step]

上面语法中 start、end 两个索引值都可使用正数或负数,其中负数表示从倒数开始。该语法表示从 start 索引的元素开始(包含),到 end 索引的元素结束(不包含)的所有元素,这和所有编程语言的约定类似。
step表示“步长”,因此 step 使用负数没有意义。
下面代码示范了使用 start、end 获取元组中间一段的用法:

a_tuple = ('crazyit', 20, 5.6, 'fkit', -17)
# 访问从第2个到倒数第4个(不包含)所有元素
print(a_tuple[1: 3]) # (20, 5.6)
# 访问从倒数第3个到倒数第1个(不包含)所有元素
print(a_tuple[-3: -1]) # (5.6, 'fkit')
# 访问从第2个到倒数第2个(不包含)所有元素
print(a_tuple[1: -2]) # (20, 5.6)
# 访问从倒数第3个到第5个(不包含)所有元素
print(a_tuple[-3: 4]) # (5.6, 'fkit')

如果指定 step 参数,则可间隔 step 个元素再取元素。例如如下代码:

b_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9)
# 访问从第3个到第9个(不包含)、间隔为2的所有元素
print(b_tuple[2: 8: 2]) # (3, 5, 7)
# 访问从第3个到第9个(不包含)、间隔为3的所有元素
print(b_tuple[2: 8: 3]) # (3, 6)
# 访问从第3个到倒数第2个(不包含)、间隔为3的所有元素
print(b_tuple[2: -2: 2]) # (3, 5, 7)

3.列表和元组的数学运算:

(1)加法

列表和元组支持加法运算,加法的和就是两个列表或元组所包含的元素的总和。
需要指出的是,列表只能和列表相加;元组只能和元组相加;元组不能直接和列表相加。

(2)乘法

列表和元组可以和整数执行乘法运算,列表和元组乘法的意义就是把它们包含的元素重复 N 次(N 就是被乘的倍数)。

当然,也可以对列表、元组同时进行加法、乘法运算。但具体的运算需要自己手动实现,此处不再示例。

4.in 运算符:

in 运算符用于判断列表或元组是否包含某个元素,例如如下代码:

a_tuple = ('crazyit' , 20, -1.2)
print(20 in a_tuple) # True
print(1.2 in a_tuple) # False
print('fkit' not in a_tuple) # True

5.长度、最大值和最小值:

Python 提供了内置的 ten()、max()、min() 全局函数来获取元组或列表的长度、最大值和最小值
由于 max()、min() 要对元组、列表中的元素比较大小,因此程序要求传给 max()、min() 函数的元组、列表的元素必须是相同类型且可以比较大小。例如如下代码:

# 元素都是数值的元组
a_tuple = (20, 10, -2, 15.2, 102, 50)
# 计算最大值
print(max(a_tuple)) # 102
# 计算最小值
print(min(a_tuple)) # -2
# 计算长度
print(len(a_tuple)) # 6
# 元素都是字符串的列表
b_list = ['crazyit', 'fkit', 'Python', 'Kotlin']
# 计算最大值(依次比较每个字符的ASCII码值,先比较第一个字符,若相同,继续比较第二个字符,以此类推)
print(max(b_list)) # fkit(26个小写字母的ASCII码为97~122)
# 计算最小值
print(min(b_list)) # Kotlin (26个大写字母的ASCII码为65~90)
# 计算长度
print(len(b_list)) # 4

在上面代码中,首先使用 3 个函数对元素都是数值的元组进行处理,可以看到程序获取元组的最大值、最小值等。程序后半部分使用 3 个函数对元素都是字符串的列表进行处理,也可以看到程序获取列表的最大值、最小值等,这说明 Python 的字符串也是可比较大小的,即 Python 依次按字符串中每个字符对应的编码来比较字符串的大小。

6.进阶内容:序列封包和解包

Python 还提供了序列封包(Sequence Packing)和序列解包(Sequence Unpacking)的功能。简单来说,Python 允许支持以下两种赋值方式:

  • 程序把多个值赋给一个变量时,Python 会自动将多个值封装成元组。这种功能被称为序列封包
  • 程序允许将序列(元组或列表等)直接赋值给多个变量,此时序列的各元素会被依次赋值给每个变量(要求序列的元素个数和变量个数相等)。这种功能被称为序列解包

下面代码示范了序列封包和序列解包的功能:

# 序列封包:将10、20、30封装成元组后赋值给vals
vals = 10, 20, 30
print(vals) # (10, 20, 30)
print(type(vals)) # <class 'tuple'>
print(vals[1]) # 20
a_tuple = tuple(range(1, 10, 2))
# 序列解包: 将a_tuple元组的各元素依次赋值给a、b、c、d、e变量
a, b, c, d, e = a_tuple
print(a, b, c, d, e) # 1 3 5 7 9
a_list = ['fkit', 'crazyit']
# 序列解包: 将a_list序列的各元素依次赋值给a_str、b_str变量
a_str, b_str = a_list
print(a_str, b_str) # fkit crazyit

如果在赋值中同时运用了序列封包和序列解包机制,就可以让赋值运算符支持同时将多个值赋给多个变量。例如如下代码:

# 将10、20、30依次赋值给x、y、z
x, y, z = 10, 20, 30
print(x, y, z) # 10 20 30

上面代码实际上相当于如下执行过程:

#先执行序列封包
xyz = 10,20,30
#再执行序列解包
x,y,z = xyz

使用这种语法也可以实现交换变量的值,例如如下代码:

# 将y,z, x依次赋值给x、y、z
x, y, z = y, z, x
print(x, y, z) # 20 30 10

在序列解包时也可以只解出部分变量,剩下的依然使用列表变量保存。为了使用这种解包方式,Python 允许在左边被赋值的变量之前添加“*”,那么该变量就代表一个列表,可以保存多个集合元素。例如如下程序:

# first、second保存前2个元素,rest列表包含剩下的元素
first, second, *rest = range(10)
print(first) # 0
print(second) # 1
print(rest) # [2, 3, 4, 5, 6, 7, 8, 9]
# last保存最后一个元素,begin保存前面剩下的元素
*begin, last = range(10)
print(begin) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(last) # 9
# first保存第一个元素,last保存最后一个元素,middle保存中间剩下的元素
first, *middle, last = range(10)
print(first) # 0
print(middle) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(last) # 9

作者:WananJ

本文仅供学习交流,未经允许不得用于商业用途!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表