Python——第二章:列表的概念

 

在编程中,列表(List)是一种常用的数据结构,用于存储一组有序的元素。列表是Python中的内置数据类型之一,它允许你在一个变量中存储多个值,并且这些值可以是不同的数据类型,包括整数、浮点数、字符串、其他列表等。

Python中的列表使用方括号 [] 来定义,其中的元素之间用逗号 , 分隔。以下是列表的基本概念和特点:

  1. 有序性(Ordered):列表中的元素是按照它们的顺序存储和访问的。这意味着你可以通过索引来访问列表中的特定元素。

  2. 可变性(Mutable):列表是可变的,这意味着你可以添加、删除或修改列表中的元素。这使得列表在需要动态存储数据时非常有用。

  3. 元素的多样性(Heterogeneous):列表中的元素可以是不同的数据类型,例如整数、浮点数、字符串等。甚至可以包含其他列表作为元素,创建嵌套列表。

  4. 支持切片(Slicing):你可以使用切片操作来获取列表中的子列表。这允许你在不修改原始列表的情况下提取和操作其中的一部分数据。

  5. 长度(Length):你可以使用内置函数 len() 来获取列表中元素的数量。

  6. 迭代(Iteration):你可以使用循环来迭代(遍历)列表中的元素,对每个元素执行特定的操作。

以下是创建和操作列表的一些基本示例:

# 创建一个列表
fruits = ["apple", "banana", "cherry"]

# 获取列表长度
length = len(fruits)

# 访问列表元素
first_fruit = fruits[0]  # 获取第一个元素

# 修改列表元素
fruits[1] = "orange"

# 添加元素到列表末尾
fruits.append("grape")

# 删除列表中的元素
del fruits[0]  # 删除第一个元素

# 迭代列表元素
for fruit in fruits:
    print(fruit)

列表里可以放列表,也可以放任意不同数据类型的东西,函数、类、对象也都可以放入

a = ["张三丰", "张无忌", "张绍刚", [1,2,3,True,aaaa]]

案例列举:

  1. 列表也像字符串一样也有索引和切片和步长
    lst = ["金毛狮王", "张绍刚", "张无忌", "郭麒麟"]
    
    print(lst[0])
    print(lst[1:3])
    print(lst[::-1])

    运行结果:

    金毛狮王
    ['张绍刚', '张无忌']
    ['郭麒麟', '张无忌', '张绍刚', '金毛狮王']
  2. 索引如果超过范围会报错
    lst = ["金毛狮王", "张绍刚", "张无忌", "郭麒麟"]
    print(lst[3652])   # list index out of range

    运行结果: 

        print(lst[3652])   # list index out of range
              ~~~^^^^^^
    IndexError: list index out of range
  3. 可以用for循环进行遍历
    lst = ["金毛狮王", "张绍刚", "张无忌", "郭麒麟"]
    
    for item in lst:
        print(item)
    运行结果:
    金毛狮王
    张绍刚
    张无忌
    郭麒麟
  4. 用len可以拿到列表的长度
    lst = ["金毛狮王", "张绍刚", "张无忌", "郭麒麟"]
    print(len(lst))

    运行结果:

    4

 

列表用单引号或双引号括

lst1 = ['赵敏', "张无忌", "武则天", '嬴政', '马超']
lst2 = [赵敏, 张绍刚, 张无忌, 武则天, 嬴政, 马超]

这两个lst列表之间有一个关键区别,即它们包含的元素类型不同。

lst1 = ['赵敏', "张无忌", "武则天", '嬴政', '马超']
print(lst)

lst1是一个包含字符串元素的列表。每个元素都是用单引号或双引号括起来的字符串。

lst2 = [赵敏, 张绍刚, 张无忌, 武则天, 嬴政, 马超]
print(lst2)

执行结果

Traceback (most recent call last):
  File "D:\Python\test.py", line 40, in <module>
    lst2 = [赵敏, 张绍刚, 张无忌, 武则天, 嬴政, 马超]
            ^^
NameError: name '赵敏' is not defined

lst2看起来似乎包含了未引用的标识符,这会导致语法错误。通常情况下,标识符(变量名)应该使用单引号或双引号括起来,以表示它们是字符串。如果没有括起来,Python会将它们解释为变量名,而不是字符串。

如果你的意图是将这些元素视为字符串,那么你应该使用引号将它们括起来,就像第一个lst1一样:

lst1 = ['赵敏', "张无忌", "武则天", '嬴政', '马超']

如果你的意图是将这些元素视为变量名,那么你需要确保这些变量已经定义,否则会导致NameError。例如,如果你已经定义了这些变量,那么第二个lst2将是有效的:

赵敏 = "赵敏" 张绍刚 = "张绍刚" 张无忌 = "张无忌" 武则天 = "武则天" 嬴政 = "嬴政" 马超 = "马超" 
lst2 = [赵敏, 张绍刚, 张无忌, 武则天, 嬴政, 马超]
print(lst2)

 

列表的排序

1、列表会按照你存放的顺序来保存

lst = [1, 2, 3, "麻花藤", "武大郎"] 
print(lst)

2、对列表进行升序、降序排序

lst = [222, 444, 123, 43, 123,43243, 111]
lst.sort()    # 对列表进行升序排序
lst.sort(reverse=True)   # reverse: 翻转
print(lst)

列表的嵌套

lst = ["abc", "def", ["呵呵哒", "妈妈呀", "苦苦脊瓦", ["可乐", "scrapy", 123]], 'aed', "qpr"]
print(lst[2][3][1])
lst[2][3][1] = lst[2][3][1].upper()
print(lst)

列表的循环删除(*)

错误操作

lst = ['赵敏', '张绍刚', '张无忌', '武则天', '嬴政', '马超']

for item in lst:
    if item.startswith("张"):
        lst.remove(item)  # 有bug
print(lst)

输出结果:

['赵敏', '张无忌', '武则天', '嬴政', '马超']

上面这个代码的目的是从一个列表中删除所有以"张"开头的元素。不过,这个代码在Python中有一个常见的问题。当你试图在迭代一个列表的同时修改它时,会出现一个错误。因为在迭代过程中修改列表会影响迭代器的状态。

 

安全稳妥的循环删除方式:

将要删除的内容保存在一个新列表中. 循环新列表. 删除老列表

lst = ['赵敏', '张绍刚', '张无忌', '武则天', '嬴政', '马超']

temp = [] # 准备一个临时列表, 负责存储要删除的内容
for item in lst:
    if item.startswith("张"):
        # lst.remove(item)  # 有bug
        temp.append(item)  # 把要删除的内容记录下来

for item in temp:
    lst.remove(item)  # 去原列表中进行删除操作
print(lst)
posted @ 2023-09-04 13:05  Magiclala  阅读(38)  评论(0编辑  收藏  举报