4_操作列表

4_操作列表

1.遍历列表
  1. 你经常需要遍历列表中的所有元素,对每个元素执行相同的操作。比如,在游戏中,可能需要将每个界面元素 平移相同的距离;在网站中,可能需要显示文章列表中的标题等,此时你可使用Python中的for循环。格式:for i in list: ,其中i只是定义了一个变量,你可以写成其他任意名字的变量。

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

    • 在for循环中,想包含多少行代码都可以。每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。

    • 格式:for i in [可迭代对象]:,可迭代对象包括字符串、列表、元组、字典、range()等,在末尾处不要忘了:。例如:

      citys = ['郑州','北京','上海','深圳',]
      for city in citys:
          print('{}的索引是:{}'.format(city,citys.index(city)),end = ' ')
          print()
      

      运行结果:

      郑州的索引是:0
      北京的索引是:1
      上海的索引是:2
      深圳的索引是:3

      这让Python获取列表citys中的第一个值,并将其存储到变量city中。接下来Python读取下一行代码,打印city的值——‘郑州’,然后再打印改值在列表中的索引。鉴于该列表还包含其他值,python返回到循环的第一行,获取列表中的下一个元素——‘北京’,并将其存储到变量city中,再执行打印代码,打印city的值——‘北京’……直到循环到列表中最后一个元素,此for循环结束。

  3. 在for循环结束后 执其他的操作

-  当for循环结束之后,我们还可以执行其他的操作。那么接下来的代码就不是循环体的部分了,所以需要顶格写,不需要缩进。例如:

    ```python
    citys = ['郑州','北京','上海','深圳',]
    for city in citys:
        print(city,end = ' ')
    print('遍历列表结束。')
    ```
    
    > 运行结果:
    > 郑州 北京 上海 深圳 
    > 遍历列表结束。
  1. 使用while循环遍历列表

    • 除了for循环遍历列表外,还可以使用while循环遍历列表,例如:

      num = [1,2,3,4,5,6,]
      i = 0
      while i < len(num):
      	print(num[i],end = '')
      	i += 1
      

      运行结果

      1 2 3 4 5 6

  2. python中代码块的关系

    • Python根据缩进来判断该代码行与前一行代码行的关系。比如循环体的代码块应在循环条件的下一行进行缩进(4个空格)。
2.创建数值列表
  1. 数值列表很有用,例如,在游戏中,需要需要跟踪玩家的几个最高分,在数据可视化中,处理的几乎都是有数字(温度、距离、人口数量)组成的。列表非常适用于存储数字集合,而python提供了很多工具,可帮助我们高效地处理数字列表。

  2. 使用函数range()

    • Python函数range()让你能够轻松地生成一系列的数字

    • 格式:range(start,end,[step])

      • start 指的是计数起始值,默认是 0 ;
      • stop 指的是计数结束值,但不包括 stop ;
      • step 是步长,默认为 1,不可以为 0 。
    • 生成从你指定的第一个值start开始数,步数为step,并在达到你指定的第二个值后end停止的数字里列表。例如:

      # for i in range(4):
      # 等同于 ↓
      for i in range(0,4):
          print(i ,end = '')
      '''
      运行结果:
      0 1 2 3
      '''
      
      for i in range(0,6,2):
          print(i ,end = '')
      '''
      运行结果:
      0 2 4
      '''
      
    • 注意:range()函数

      • start 的值必须小于 end 的值。
      • 它表示的是左闭右开区间;
      • 它接收的参数必须是整数,可以是负数,当参数为负数时,start和end两个参数都要指定,但不能是浮点数等其它类型;
      • 它是不可变的序列类型,可以进行判断元素、查找元素、切片等操作,但不能修改元素;
      • 它是可迭代对象,却不是迭代器。
    • 常见的range()函数的语法:

      for num1 in range(3):
      	print(num1,end='')
      # 运行结果:0 1 2
      
      for num2 in range(0,3):
      	print(num2,end='')
      # 运行结果:0 1 2
      
      for num3 in range(0,6,2):
      	print(num3,end='')
      # 运行结果:0 2 4
      
      for num4 in range(-4,-1):
      	print(num4,end='')
      # 运行结果:-4 -3 -2
      
      for num5 in range(-4,-1,2):
      	print(num5,end='')
      # 运行结果:-4 -2
      
      num = range(1,10)
      print(num[3])
      # 运行结果:4
      
      num = range(1,10)
      for i in num[:-3]:
      	print(i ,end = '')
      # 运行结果:1 2 3 4 5 6
      
    • 以下是错误的语法

      for i in range(1,3.1):
      	print(i)
      '''
      Traceback (most recent call last):
        ...
          for i in range(1,3.1):
      TypeError: 'float' object cannot be interpreted as an integer
      '''
      
      for num in range(-3):
      	print(num)
      '''
      输出为空白,且不报错
      '''
      
      num = range(1,10)
      num[0] = 11
      print(num)
      '''
      Traceback (most recent call last):
        ...
          num[0] = 11
      TypeError: 'range' object does not support item assignment
      '''
      
  3. 使用range()创建数字列表

    • 要创建数字列表,可使用函数list(),将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将是一个数字列表。例如:

      numbers = list(range(0,6,2))
      print(numbers)
      
      # 输出结果:[0,2,4]
      
  4. 对数字列表执行简单的统计计算

    • min(num_list)返回列表中最小值;

    • max(num_list)返回列表中最大值 ;

    • sum(num_list)返回列表中所有数字相加的和

      nums = list(range(0,10,2))
      print(nums)
      print('列表中最小值:{}'.format(min(nums)))
      print('列表中最大值:{}'.format(max(nums)))
      print('列表中的和是:{}'.format(sum(nums)))
      

      运行结果:
      [0, 2, 4, 6, 8]
      列表中最小值:0
      列表中最大值:8
      列表中的和是:20

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

  2. 比如,生成一个1~10平方的列表。

    squarts = [i ** 2 for i in range(1,11)]
    print(squarts)
    

    运行结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  3. 要使用这种语法,首先指定一个描述性的列表名。然后,指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。注意:这里的for循环语句末尾没有冒号:

4.使用列表的一部分
  1. 切片

    • 要创建切片,可指定要使用的第一个元素和最后一个元素的索引,python在到达你指定的第二个索引前面的元素后停止。比如,要输出列表中的前五个元素,需要指出索引0~5,list[0:5]。遵循左闭右开原则,可以理解为左边的值可以取到,右边的值取不到。

    • 格式:list[start:end:direction]

    • 注意

      • 你可以不指定startend索引,当你这样做时,会将整个列表截取;

      • 你可以只指定start 的值,当你这样做时,会从你指定索引开始,截取到列表最后一个元素;

      • 你可以只指定end的值,当你这样做时,会从列表第一个元素开始,截取到指定索引的前面一个元素;

      • 无论你使用那一种,中间的冒号:不能省略;

      • 你还可以指定direction的值来设定开始的方向。默认是从左向右取值,当direction-1时代表从右向左取值,此时start的索引应该大于end的索引。比如:

        num_list = [1,2,3,4,5,6,7,8,9]
        print(num_list[5:])
        print(num_list[:4])
        print(num_list[1:5])
        print(num_list[5:1:-1])
        print(num_list[-5:-1])
        print(num_list[-1:-5:-1])
        

        执行结果:

        [6,7,8,9]
        [1,2,3,4]
        [2,3,4,5]
        [6,5,4,3]
        [5,6,7,8]
        [9,8,7,6]

    • 总结

      • 当要求需要获取前几个元素,就将参数写为几,且只指定一个参数。例如:获取前4个元素,list[:4]
      • 当要求获取第几个到第几个元素时,start的索引需要减1而end的索引不需要减1,例如:获取第3个到第7个,list[2:7];
      • 当获取倒数第几个时,不需要将索引减1,例如:获取倒数第5个,list[-5] 。
  2. 遍历切片

    • 你可以像遍历列表那样遍历列表的切片
    • 格式:for i in list[start:end]:
  3. 复制列表

    • 将一个列表直接赋值给另外一个列表
    • 格式: list2 = list1
    • 这种语法实际上是让python 将新变量list2关联到包含在list1中的列表,因此两个变量都指向同一个列表。也就是说当我们修改其中一个列表的值时,另外一个列表也会改变。
  4. 切片和复制列表的区别

    • 使用list2 = list1[:]这种语法和list2 = list1 这两种语法都能将list1中所有值赋值给list2,但是有时候我们需要修改list2中的值,但是不影响list1,这时,两种语法的差别就显示出来了,请看例子:

      # 直接复制列表
      list1 = list(range(1,11))
      print('修改前list1:{}'.format(list1))
      list2 = list1 # ①
      print('修改前list2:{}'.format(list2))
      
      list2[2] = 11  # ②
      print('仅修改了list2第三个元素的值后:')
      print('修改后list1:{}'.format(list1))
      print('修改后list2:{}'.format(list2))
      

      运行结果:

      修改前list1:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      修改前list2:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      仅修改了list2第三个元素的值后:
      修改后list1:[1, 2, 11, 4, 5, 6, 7, 8, 9, 10]
      修改后list2:[1, 2, 11, 4, 5, 6, 7, 8, 9, 10]

      在①处我们直接将list1赋值给list2,然后分别打印list1和list2两个列表,确认两个列表中的元素是一样的;在②处我们只修改了list2中索引为2的(即第3个)元素,然后分别打印list1和list2两个列表,发现list1,list2中的元素都发生了变化。

      list1 = list(range(1,11))
      print('修改前list1:{}'.format(list1))
      list2 = list1[:] # ①
      print('修改前list2:{}'.format(list2))
      
      list2[2] = 0  # ②
      print('仅修改了list2第三个元素的值后:')
      print('修改后list1:{}'.format(list1))
      print('修改后list2:{}'.format(list2))
      

      运行结果:

      修改前list1:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      修改前list2:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      仅修改了list2第三个元素的值后:
      修改后list1:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      修改后list2:[1, 2, 0, 4, 5, 6, 7, 8, 9, 10]

      在①处我们使用切片的方式将list1中的元素全部赋值给list2,然后分别打印list1和list2两个列表,确认两个列表中的元素是一样的;在②处我们只修改了list2中索引为2的(即第3个)元素,然后分别打印list1和list2两个列表,发现只有list2中的元素发生了变化,list1中的值并没有发生变化。

  5. 总结

    • 切片实际上就是先创建列表的副本,然后将副本赋值给新的列表,所以修改任何一个列表不会影响另外一个。
    • 复制列表实际上是两个列表同时指向同一个地址,改变任何一个列表,另外一个列表也会发生改变。
7.总结
  • 列表非常适合用于存储在程序运行期间可能变化的数据集,因为列表中的元素是可以修改的。
  • 在实际应用中列表适合于存储类型单一的数据,比如描述使用列表存储全班的姓名names = [‘张三’,‘李四’,‘王五’,‘马六’,],但是存储一个人的多种信息时,使用列表就不方便了,因为列表智能存储值,而不能对每个元素进行描述。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值