python个人学习笔记(3)——操作列表

操作列表

  • 遍历整个列表

    • 循环:使用计算机自动完成重复操作的常见方式之一
    #示例如下:
    magicians = ['alice','david','carolina']#列表原型
    for magician in magicians:
    #Python将首先读取其中的第一行代码并将其存储在变量magician
      print(magician)
      #缩进很重要,后面再提及,此时需注意
    

    运行结果:
    alice
    david
    carolina
    for循环操作时,重复进行相同操作,直到列表中再没有其他的代码

    另外,编写for循环时,对于用于存储列表中每一个值的临时变量,可指定任何名称。然而,选择描述单个列表元素的有意义的名称大有帮助。

  • 在for循环中进行更多操作
    在for循环中,想包含多少行代码都行。
    但需要注意的是,需要进行循环操作的代码,需进行相同的缩进

    • 在for循环结束之后进行一些操作
      当for循环后面的代码行没有缩进,而是和for处于同一水平线时,该代码将会在循环结束后被执行
    #示例如下:
    magicians = ['alice','david','carolina']#列表原型
    for magician in magicians:
      print(magician.title()+",that was a great trick.")
      print("I can't wait to see you nrxt trick,"+magician.title()+".\n")
    print("Thank you,everyone.That is a great show!")
    

    运行结果:
    Alice,that was a great trick.
    I can’t wait to see you nrxt trick,Alice.

    David,that was a great trick.
    I can’t wait to see you nrxt trick,David.

    Carolina,that was a great trick.
    I can’t wait to see you nrxt trick,Carolina.

    Thank you,everyone.That is a great show!

  • 避免缩进错误

    • 忘记缩进
      对于位于for语句后且属于循环组成部分的代码行,一定要缩进。
      如果你忘记了缩进,编译器会提醒你。
      如诱发错误:
      IndentationError:expected an indented block
      通常,将紧跟着for语句后面的代码块缩进,可消除这种缩进错误
    • 忘记缩进额外的代码行
      有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。
      这是一个逻辑错误。在语法上,这些代码行都是合法的。但由于出现逻辑错误,导致结果不符合预期。
    • 不必要的缩进
      如果你不小心缩进了无需缩进的代码行,python将指出这点
      IndentationError:unexpected indent
      为避免意外的缩进错误,请只缩进需要缩进的代码
    • 循环后不必要的缩进
      如果不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。在有些情况下,这可能导致Python报告语法错误,但更多情况下,这只会导致逻辑错误。
      所以,如果原本只执行一次的代码执行了多次,那么,请确定你是否不应该缩进执行该代码
    • 漏写了冒号
      for循环后的冒号告诉Python,下一行是循环的第一行
      如果不小心遗漏了冒号,将导致语法错误,因为python不知道你意欲何为,这种错误虽然容易消除,但并不那么容易发现。
      如SyntaxError: invalid syntax
  • 创建数字列表

    • 使用函数range()
    for i in range(4):
      print(i)
    for i inrange(1,4):
      print(i)
    

    两个循环的输出结果分别为:
    0
    1
    2
    3

    1
    2
    3
    函数range()让Python从你指定的第一个值(如无指定,默认为0)开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值

    使用range()时,如果输出不符合预期,请尝试将指定的值加1或减1

    • 使用range()创建数字列表
      • 要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表
      nums = list(range(5))
      print(nums)
      
      运行结果如下:
      [0, 1, 2, 3, 4]
      • 使用range()时,还可以指定步长(不指定时,默认为1)
      nums = list(range(2,11,2))
      print(nums)
      
      运行结果:
      [2, 4, 6, 8, 10]
      • 使用range()几乎能创建任何需要的数字集
      squares_1 = []
      squares_2 = []
      for i in range(1,11):
        square = i**2
        squares_1.append(square)
      print(squares_1)
      for i in range(1,11):
        squares_2.append(i**2)
      print(squares_2)
      
      运行结果为:
      [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      由此可见,上述两种创建列表方式的结果相同
      在创建更复杂的列表时,有时候,可利用临时变量使得代码更易读;而在其他情况下这样做只能让代码无谓地变长。你首先应该考虑的是,编写清晰易懂且能完成所需功能的代码;等到审核代码时,再考虑采用更高效的方法。
      • 对数字列表执行简单的统计计算
        • min(数字列表名) 返回数字列表里面的最小值
        • max(数字列表名) 返回数字列表里面的最大值
        • sum(数字列表名) 返回数字列表中所有数字的总和
      • 列表解析
        • 解释:列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。
        squares_1 = []
        squares_2 = []
        for i in range(1,11):
          square = i**2
          squares_1.append(square)
        print(squares_1)
        squares_2 = [i**2 for i in range(1,11)]
        print(squares_2)
        
        运行结果为:
        [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        根据上面的代码可以清晰地看出列表解析的简洁,当你觉得写三四行代码来生成列表有点繁杂时,就应考虑创建列表解析了。

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

    • 切片
      要创建切片,需指定要使用的第一个元素的索引和最后一个元素的索引加1
    • 遍历切片
      • 列表名[m:n] 第m个元素到第n-1个元素
      • 列表名[:n] 没有指定第一个索引,默认从列表开头开始
      • 列表名[m:] 没有指定第二个索引,默认终止于列表结尾
    #示例如下:
    names = ['Lee','Lily','John','Tom']#赋值
    print(names[1:3])#输出第m个元素到第n-1个元素
    print(names[:2])#输出第一个元素到第n-1个元素
    print(names[1:])#输出第m个元素到最后一个元素
    for name in names[1:]:
      print(name)#遍历切片并依次输出
    
    

    运行结果:
    [‘Lily’, ‘John’]
    [‘Lee’, ‘Lily’]
    [‘Lily’, ‘John’, ‘Tom’]
    Lily
    John
    Tom

    • 复制列表
      要复制列表,可创建一个包含整个列表的切片,方法是同时省去起始索引和终止索引([:])
      另外,可能有些同学会想,我直接将原列表赋值给一个新的列表名不就可可以实现列表的复制了吗?让我们来试试看
    names_1 = ['Lee','John','Tom','Lily','Toni']
    names_2 = ['Lee','John','Tom','Lily','Toni']
    names_copy_1 = names_1[:]#第一种方法
    names_copy_2 = names_2#第二种方法
    #我们分别给列表做修改,观察得到的是不是两个列表
    print(names_1)#输出初始列表状态
    print(names_2)
    print(names_copy_1)
    print(names_copy_2)
    names_1.append('Mark')#分别对三个列表进行操作
    names_2.append('James')
    names_copy_1.append('Charles')
    names_copy_2.append('Jseph')
    print(names_1)#输出处理后列表状态
    print(names_2)
    print(names_copy_1)
    print(names_copy_2)
    

    运行结果:
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’, ‘Mark’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’, ‘James’, ‘Jseph’]

    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’, ‘Charles’]
    [‘Lee’, ‘John’, ‘Tom’, ‘Lily’, ‘Toni’, ‘James’, ‘Jseph’]

    通过输出结果的对比,我们可以看出第一种方法得到的是两个不同的列表;而第二种方法仅仅是多了指向该列表的变量,并没有得到新的列表,所以第一种方法可行,第二种方法则不行。

  • 元组

    • 含义:Python将不能修改的值称为不可变的,而不可变的列表则称为元组,但是调用元组元素的方式还是一样的,如:dimension[0]
    • 定义:元组看起来像列表,但使用圆括号而不是使用方括号来标识。
      例如:dimension(20,40)
      当代码试图修改元组时,python会报告错误,如下:
      TypeError:‘xxx’ object does not support item assignment
    • 遍历元组中所有值
      像列表一样用for循环遍历所有值
    • 修改元组元素
      虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,要想改变元组的元素,可对元组进行重新定义,这是符合语法的。
  • 设置代码样式

    • 缩进PEP 8建议缩进时都使用四个空格,这既可提高代码的可读性,
    • 行长
      • 代码建议每行不超过80字符
        优点:使用标准字长可以让他们在屏幕上并排打开两三个文件时能同时看到各个文件的完整行。
        (有些小组可能使用不超过99字符,但一般不推荐)
      • 注释行长都不超过72字符
        因为有些工具能为大型项目自动生成文档时,会在每行注释开头添加格式化字符。
    • 空行
      要将程序的不同部分分开,可利用空行,这有利于提高代码的可读性,同时,空行不会影响代码的运行

      建议仅用一行空行,而不是三四行空行

    个人从书本学到的知识,作为自己学习笔记的同时,与各位朋友分享,如有不足,请多多指教

    参考文献:《Python编程从入门到实践》【美】Eric Matthes 著 袁国忠 译

你可能感兴趣的:(Python个人学习笔记,python,列表)