zoukankan      html  css  js  c++  java
  • 列表和元组

    列表(list)简介

    1 列表是什么

    列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字 0~9 或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。 列表通常包含多个元素,因此给列表指定一个表示复数的名称(如 letters、digits 或 names) 是个不错的主意。

    在 Python 中,用方括号([])表示列表,并用逗号分隔其中的元素。下面是一个简单的列 表示例,其中包含几种自行车:

    bicycles = ['trek','cannondale','redline','specailized']
    print(bicycles)
    #['trek', 'cannondale', 'redline', 'specialized']
    

    如果让 Python 将列表打印出来,Python 将打印列表的内部表示,包括方括号。

    1.1 访问列表元素

    列表是有序集合,因此要访问列表的任意元素,只需将该元素的位置(索引)告诉 Python 即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号内。 例如,下面的代码从列表 bicycles 中提取第一款自行车:

    bicycles = ['trek','cannondale','redline','specailized']
    print(bicycles[0])
    #trek
    

    1.2 索引从0而不是1开始

    在 Python 中,第一个列表元素的索引为 0,而不是 1。大多数编程语言是如此规定的,这与 列表操作的底层实现相关。

    第二个列表元素的索引为 1。根据这种简单的计数方式,要访问列表的任何元素,都可将其 位置减 1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引 3。

    下面的代码访问索引 1 和索引 3 处的自行车:

    bicycles = ['trek','cannondale','redline','specailized']
    print(bicycles[1])
    #cannondale
    print(bicycles[3])
    #specailized
    

    Python 为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让 Python 30 第 3 章 列表简介 返回最后一个列表元素:

    bicycles = ['trek','cannondale','redline','specailized']
    print(bicycles[-1])
    #specailized
    

    这段代码返回'specialized'。这种语法很有用,因为你经常需要在不知道列表长度的情况 下访问最后的元素。这种约定也适用于其他负数索引。例如,索引-2 返回倒数第二个列表元素, 索引-3 返回倒数第三个列表元素,依此类推。

    1.3 使用列表中的各个值

    你可以像使用其他变量一样使用列表中的各个值。例如,可以使用 f 字符串根据列表中的值 来创建消息。

    下面尝试从列表中提取第一款自行车,并使用这个值创建一条消息:

    bicycles = ['trek', 'cannondale', 'redline', 'specialized']
    message = f"My first bicycle was a {bicycles[0].title()}."
    print(message) 
    #My first bicycle was a Trek.
    

    2 修改、添加和删除元素

    2.1 修改列表元素

    修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改 的元素的索引,再指定该元素的新值。

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    #['honda', 'yamaha', 'suzuki'] 
    motorcycles[0] = 'ducati'
    print(motorcycles) 
    #['ducati', 'yamaha', 'suzuki'] 
    

    通过这种方法你可以修改任意列表元素的值,而不仅仅是第一个元素的值。

    2.2 在列表中添加元素

    2.2.1 在列表末尾添加元素

    语法

    list.append(value)
    #元素value将被添加到list的末尾
    

    在列表中添加新元素时,最简单的方式是将元素附加(append)到列表。给列表附加元素时, 它将添加到列表末尾。继续使用前一个示例中的列表,在其末尾添加新元素'ducati':

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    #['honda', 'yamaha', 'suzuki']
    motorcycles.append('ducati')
    print(motorcycles) 
    #['honda', 'yamaha', 'suzuki', 'ducati']
    

    方法 append()让动态地创建列表易如反掌。例如,你可以先创建一个空列表,再使用一系列 函数调用 append()来添加元素。下面来创建一个空列表,再在其中添加元素'honda'、'yamaha' 和'suzuki':

    motorcycles = []
    motorcycles.append('honda')
    motorcycles.append('yamaha')
    motorcycles.append('suzuki')
    print(motorcycles)
    #['honda', 'yamaha', 'suzuki']
    
    2.2.2 在列表中插入元素

    语法

    list.insert(index,value)
    
    • index:索引,元素将插入到指定索引。
    • value:要插入的元素。

    使用方法 insert()可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。

    motorcycles = ['honda', 'yamaha', 'suzuki']
    motorcycles.insert(0, 'ducati')
    print(motorcycles) 
    #['ducati', 'honda', 'yamaha', 'suzuki']
    

    2.3 从列表中删除元素

    2.3.1 使用del语句删除元素
    del list[index]
    #删除指定位置的元素
    

    使用 del 语句将值从列表中删除后,你就无法再访问它了。

    2.3.2 使用方法pop()删除元素

    有时候,你要将元素从列表中删除,并接着使用它的值。例如,你可能需要获取刚被射杀的 外星人的 x 坐标和 y 坐标,以便在相应的位置显示爆炸效果;在 Web 应用程序中,你可能要将用 户从活跃成员列表中删除,并将其加入到非活跃成员列表中。

    方法 pop()删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比: 列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

    pop()方法有一个返回值,返回被弹出的元素,可以用一个变量来接收。

    list1 = [1,2,3,4,5,6,7,8,9]
    popped_num = list1.pop()
    print(popped_num)
    #9
    print(list1)
    #[1,2,3,4,5,6,7,8]
    
    2.3.3 弹出列表中任何位置的元素

    实际上,可以使用 pop()来删除列表中任意位置的元素,只需在圆括号中指定要删除元素的 索引即可。

    list1 = [1,2,3,4,5,6,7,8,9]
    popped_num = list1.pop(5)
    print(popped_num)
    #6
    print(list1)
    #[1,2,3,4,5,7,8,9]
    
    2.3.4 根据值删除元素
    list1 = [1,2,3,4,5,6,7,8,9]
    list1.remove(5)
    print(list1)
    #[1,2,3,4,7,8,9]
    

    有时候,你不知道要从列表中删除的值所处的位置。如果只知道要删除的元素的值,可使用 方法 remove()。

    但是当一个列表中有多个值相同的时候remove()只会删除掉位置靠前,也就是索引值最小的那个。如果想要全部删除,就需要使用循环来确保将每个值都删除。

    当你想删除一个值,但是后面还需要用到的时候,可以借用一个变量来存储这个值,如下:

    list1 = [1,2,3,4,5,6,7,8,9]
    remove_num = 5
    list1.remove(remove_num)
    print(list1)
    #[1,2,3,4,7,8,9]
    print(remove_num)
    #5
    

    3 组织列表

    3.1 sort()方法对列表永久排序

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    nums.sort()
    print(nums)
    #[1, 2, 3, 5, 6, 7, 8, 9, 42]
    

    sort()方法默认升序排列,如果需要降序排列,只需向 sort()方法传递参数reverse=True即可。

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    nums.sort(reverse=True)
    print(nums)
    #[42, 9, 8, 7, 6, 5, 3, 2, 1]
    

    同时,sort()方法是一个修改列表的方法,它会改变原列表。

    3.2 函数sorted()对列表临时排序

    函数sorted()会对列表进行排序并返回排序后的结果,但是不会改变原来的列表。

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    asc_nums = sorted(nums)
    print(asc_nums)
    #[1, 2, 3, 5, 6, 7, 8, 9, 42]
    print(nums)
    #[5, 6, 9, 42, 1, 2, 3, 8, 7]
    

    也可向函数 sorted()传递参数 reverse=True,得到相反顺序的列表。

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    asc_nums = sorted(nums,reverse=True)
    print(asc_nums)
    #[42, 9, 8, 7, 6, 5, 3, 2, 1]
    print(nums)
    #[5, 6, 9, 42, 1, 2, 3, 8, 7]
    

    3.3 倒着打印列表

    要反转列表元素的排列顺序,可使用方法 reverse()

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    nums.reverse()
    print(nums)
    #[7, 8, 3, 2, 1, 42, 9, 6, 5]
    

    方法 reverse()永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需 对列表再次调用 reverse()即可。

    3.4 确定列表的长度

    使用函数 len()可快速获悉列表的长度。

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    nums_len = len(nums)
    print(nums_len)
    #9
    list1 = ['a', 'd', 'c', 6, 9, 3]
    list1_len = len(list1)
    print(list1_len)
    #6
    

    操作列表

    1 遍历整个列表

    使用for循环来打印列表中所有元素:

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    for num in nums:
        print(num)
    #5
    #6
    #9
    #42
    #1
    #2
    #3
    #8
    #7
    

    1.1 在for循环中执行更多操作

    nums = [5, 6, 9, 42, 1, 2, 3, 8, 7]
    for num in nums:
        print(f"2 * {num} = {2 * num}")
    #2 * 5 = 10
    #2 * 6 = 12
    #2 * 9 = 18
    #2 * 42 = 84
    #2 * 1 = 2
    #2 * 2 = 4
    #2 * 3 = 6
    #2 * 8 = 16
    #2 * 7 = 14
    

    2 创建数值列表

    列表非常适合用于存储数字集合,而 Python 提供了很多工具,可帮助你高效地处理数字列 表。明白如何有效地使用这些工具后,即便列表包含数百万个元素,你编写的代码也能运行得 很好。

    2.1 使用range()函数

    Python 函数 range()让你能够轻松地生成一系列数。例如,可以像下面这样使用函数 range() 来打印一系列数:

    nums = range(1,10)
    for num in nums:
        print(num)
    #1
    #2
    #3
    #4
    #5
    #6
    #7
    #8
    #9
    

    调用函数 range()时,也可只指定一个参数,这样它将从 0 开始。例如,range(6)返回数 0~5。

    nums = range(6)
    for num in nums:
        print(num)
    #0
    #1
    #2
    #3
    #4
    #5
    

    2.2 使用range()创建数字列表

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

    nums = list(range(1,5))
    print(nums)
    #[1, 2, 3, 4]
    

    使用函数 range()时,还可指定步长。为此,可给这个函数指定第三个参数,Python 将根据 这个步长来生成数。

    例如,下面的代码打印 1~10 的偶数:

    even_nums = list(range(2,11,2))
    print(even_nums)
    #[2, 4, 6, 8, 10]
    

    在这个示例中,函数 range()从 2 开始数,然后不断加 2,直到达到或超过终值(11),

    使用函数 range()几乎能够创建任何需要的数集。例如,如何创建一个列表,其中包含前 10 个整数(1~10)的平方呢?在 Python 中,用两个星号(**)表示乘方运算。下面的代码演示了 如何将前 10 个整数的平方加入一个列表中:

    squares = []
    for num in range(1,11):
        squares.append(num ** 2)
    print(squares)
    #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    2.3 对数字列表执行简单的统计计算

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

    data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(min(data1))
    #1
    print(max(data1))
    #9
    print(sum(data1))
    #45
    

    3 使用列表的一部分

    以处理列表的部分元素,Python 称之为切片。

    3.1 切片

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

    data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(data1[0:5])
    #[1, 2, 3, 4, 5]
    

    你可以生成列表的任意子集。例如,如果要提取列表的第二、第三和第四个元素,可将起始 索引指定为 1,并将终止索引指定为 4:

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

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

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

    要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素到列表末 尾的所有元素,可将起始索引指定为 2,并省略终止索引:

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

    若同时省略起始和结束索引,则创建一个和原始列表一样的切片。

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

    可在表示切片的方括号内指定第三个值。这个值告诉 Python 在指定范围内每隔多少元素 提取一个。

    data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(data1[0:7:3])
    #[1, 4, 7]
    

    3.2 遍历切片

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

    data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    for da in data1[0:4]:
        print(da)
    #1
    #2
    #3
    #4
    

    3.3 复制列表

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

    data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    data2 = data1[:]
    print(data2)
    #[1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    现在尝试修改两个列表的元素,发现互不影响,说明通过切片复制的列表和原列表是完全独立的。

    data1.append(100)
    data2.append(200)
    print(data1,data2)
    #[1, 2, 3, 4, 5, 6, 7, 8, 9, 100] [1, 2, 3, 4, 5, 6, 7, 8, 9, 200]
    

    4 元组

    列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网 站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素, 元组可以满足这种需求。Python 将不能修改的值称为不可变的,而不可变的列表被称为元组。

    4.1 定义元组

    元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问 其元素,就像访问列表元素一样。

    例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它 们是不能修改的:

    dimensions = (200, 50)
    print(dimensions[0])
    #200
    print(dimensions[1])
    #500
    

    严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要 定义只包含一个元素的元组,必须在这个元素后面加上逗号:

    my_t = (3,)
    

    4.2 遍历元组中的所有值

    像列表一样,也可以使用 for 循环来遍历元组中的所有值:

    dimensions = (200, 50)
    for dim in dimensions:
        print(dim)
    #200
    #50
    

    5.3 修改元组变量

    虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:

    dimensions = (200, 50)
    print("Original dimensions:")
    for dimension in dimensions:
    		print(dimension)
    #200
    #50
    dimensions = (400, 100)
    print("
    Modified dimensions:")
    for dimension in dimensions:
    		print(dimension) 
    #400
    #100
    

    本文来自博客园,作者:雨-铃,原文链接:https://www.cnblogs.com/yuling25/p/15098918.html

  • 相关阅读:
    ViewPager+GridView实现首页导航栏布局分页效果
    RecyclerView和PullToRefreshListView的对比
    信鸽推送的使用
    2020重新出发,JAVA设计模式 之十 外观模式
    2020重新出发,JAVA设计模式 之九 装饰模式
    2020重新出发,JAVA设计模式 之八 桥接模式
    2020重新出发,JAVA设计模式 之七 适配器模式
    2020重新出发,JAVA设计模式 之六 代理模式
    2020重新出发,JAVA设计模式 之五 建造者模式
    2020重新出发,JAVA设计模式 之四 抽象工厂模式
  • 原文地址:https://www.cnblogs.com/yuling25/p/15098918.html
Copyright © 2011-2022 走看看