python中如何操作列表

操作列表

任务

  1. 学习遍历整个列表-使用循环

遍历列表

无论列 表有多长。循环让你能够对列表的每个元素都采取一个或一系列相同的措施, 从而高效地处理任何长度的列表,包括包含数千乃至数百万个元素的列表

–可使用Python中的for 循环

for循环

 magicians = ['alice', 'david', 'carolina'] 
 for magician in magicians: 
     print(magician) 
#对于每一个位于magicians中的元素取名为magician,并在缩进行操作
#特别要注意":"符号
  • 对列表中的每个元素,都将执行循环指定的步骤,而不 管列表包含多少个元素。如果列表包含一百万个元素,Python就重复执行指定的步 骤一百万次,且通常速度非常快。

  • 其中magician为临时变量,是由自己指定任意名称的,当然选择描述单个列表元素的意义名称有很大裨益。在循环体中对于每个元素可使用magician来进行处理本次循环的元素

    #推荐使用单复数的形式来命名,可以帮助你判断你当前处理的是单个列表元素,还是整个列表
    for cat in cats: 
        XXXXX
    for dog in dogs: 
        XXXXX
    for item in list_of_items:
        XXXXX
    
  • 在代码行for magician in magicians :后面,每个缩进的代码行都是循环的一部分(缩进代表了c语言中的“{}”结构),将针对列表中的每个值都执行一次。

  • 在结束for循环 - 方式:结束缩进,顺序执行。

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

常见缩进错误提醒

1. 忘记缩进
IndentationError: expected an indented block 
#缩进错误:应为缩进的块
  • 解决方法:

    通常,将紧跟在for 语句后面的代码行缩进,可消除这种缩进错误。

2.忘记缩进额外的代码行
  • 有时候,循环能够运行且不会报告错误,但结果可能出人意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。属于逻辑错误
magicians = ['alice', 'david', 'carolina'] 
for magician in magicians: 
      print(f"{magician.title()}, that was a great") 
print(f"I can't wait to see, {magician.title()}.\n")
#结果最后一次输出magician为carolina,因为for循环结束后,magician的终值为carolina。
3.不必要的缩进
  • 如果你不小心缩进了无须缩进的代码行,Python将指出这一点
 message = "Hello Python world!" 
     print(message) 
#IndentationError: unexpected indent 
#缩进错误:不需要缩进
4.循环后不必要的缩进
  • 不需要循环的语句写进循环缩进中,导致重复执行。
5.遗落了冒号
 for magician in magicians 
      print(magician) 
  • 遗漏了“:”导致语法错误 循环三部曲 “**for in :”**缺一不可

数值列表

列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理 数字列表

1.函数range(value1,value2)

函数range() 让你能够轻松地生成value1(包括)到value2(不包括)的一系列数。“[ )” 是一种左闭右开的中间的数值

for value in range(1, 5): 
    print(value) 
#输出:
#1 
#2 
#3 
#4 
  • 要打印数1~5,就需要使用range(1,6)
for value in range(1, 6): 
    print(value) 
  • 注意:

    1.range(6) 当函数range()只给定一个参数时,默认从0开始,即[0,6)

    生成0,1,2,3,4,5

    2.range(0,6,2) 第三个参数为步长,python将根据步长来生成数,默认为1,range(0,6,2) 即生成了0,2,4。range(1,6,2):生成1,3,5


提升:创建1-10的平方数集

squares = []
for i in range(1,11):
    square  = i*i    #或者num = i**2   即i的平方
    squares.append(square)
print(squares)
#输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#简化
squares = []
for i in range(1,11)
	squares.append(i**2)
print(squares)

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

有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的 最大值、最小值和总和

digits = [1,5,6,3,4,8,9,7]
max(digits)
min(digits)
sum(digits)

3.列表解析

列表解析让你只需编写一 行代码就能生成如列表squares的列表 。

squares=[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表解析:
squares = [value**2 for value in range(1, 11)] 
print(squares) 
#要使用这种语法,首先指定一个描述性的列表名,如squares 。然后,指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为value**2 ,它计算平方值。接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for 循环为for value in range(1,11),它将值1~10提供给表达式value**2 。请注意,这里的for 语句末尾没有冒号。
  • 先执行for value in range(1,11) 生成的每一个value值都会value**2放进列表中,列表中的个数取决于range()中生成的个数
  • 在for前面可以在生成的数的关系运算 且for循环没有“:”号。

4.列表切片

在python中你还可以处理列表的部分元素,称之为 切片 用符号 “:”

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

    num  =  [i for i in range(0,101)]
    print(num[50:101])
    #输出50-100
    players = ['charles', 'martina', 'michael', 'florence', 'eli'] 
    print(players[0:3]) 
    #输出['charles', 'martina', 'michael']
    print(players) 
    #并不会改变原列表,除非赋值
    
    • 你可以生成列表的任意子集。

      例如,如果要提取列表的第二、第三和第四个元素, 可将起始索引指定为1 ,并将终止索引指定为4

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

    players = ['charles', 'martina', 'michael', 'florence', 'eli'] 
    print(players[:4]) 
    #输出['charles', 'martina', 'michael', 'florence'] 
    
    • 同理,不指定表尾索引,Python将自动从列表表尾结束。
    • 甚至,根据负数索引可指定最后三个元素,或者最后两个不要
    print(players[-3:]) 
    #输出['michael', 'florence', 'eli'] 
    print(players[:-2]) 
    #输出['charles', 'martina', 'michael']
    
  • 注意  可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围 内每隔多少元素提取一个。

players = ['charles', 'martina', 'michael', 'florence']
print(players[::2])
#输出 ['charles', 'michael']

5.遍历切片列表

如果要遍历列表的部分元素,可在for 循环中使用切片。

players = ['charles', 'martina', 'michael']
for player in players[1:]:
    print(player)
#输出['martina', 'michael']

遍历前两名

players = ['charles', 'martina', 'michael']
for player in players[:2]:
    print(player.title)
#输出['charles', 'martina']

列表的复制

经常需要根据既有列表创建全新的列表,要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索 引([:] )。这让Python创建一个始于第一个元素、终止于最后一个元素的切片, 即整个列表的副本。

players = ['charles', 'martina', 'michael']
players2 = players
players.append("AAAA")
players2.append("BBBBB")
print(players)
print(players2)
#输出  ['charles', 'martina', 'michael', 'AAAA', 'BBBBB']
#     ['charles', 'martina', 'michael', 'AAAA', 'BBBBB']
  • 可见,列表的复制不能简单的相等

    players2 = players时只是将同一个地址分给了两个变量,即两个变量指向同一个内存地址。

    因此修改任何一个列表都会导致这片空间所存储的数据发生变化。

以下是几种复制的方式:

方法一:使用切片操作符[:]

original_list = [1, 2, 3, 4, 5]
copied_list = original_list[:]

方法二:使用列表的copy()方法

original_list = [1, 2, 3, 4, 5]
copied_list = original_list.copy()

方法三:使用list()函数

original_list = [1, 2, 3, 4, 5]
copied_list = list(original_list)

方法四:使用循环遍历原始列表,并将元素逐个添加到一个新的列表中

original_list = [1, 2, 3, 4, 5]
copied_list = []
for item in original_list:
    copied_list.append(item)

以上四种方法对于列表中的元素是可变对象(如字典或列表),那么这些方法将复制引用,而不是创建新的对象

players = [['charles', 'martina'], 'michael']
#列表中包含列表
players2 = players[:]
#此时上述方法对于第二层的列表即['charles', 'martina']是采用的复制引用,不是副本
players[0].append("AAAA")
players2[0].append("BBBBB")
print(players)
print(players2)

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

  • 解决方法

    import copy
    
    players = [['charles', 'martina'], 'michael']
    players2 = copy.deepcopy(players)
    players[0].append("AAAA")
    players2[0].append("BBBBB")
    print(players)
    print(players2)
    #使用copy包中的深度复制方法即可
    
  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值