学习 Python 列表数据结构 - 第 1 部分
数据结构是数据类型、它们之间的关系以及可应用于数据的函数或操作的集合。数据类型可以是字符串、整数、浮点值等。
可变/不可变对象有什么区别?
可变对象
- 一旦创建,状态就可以更改的对象,例如添加、更新或删除元素。
- 列表、字典、集合、字节数组是Python中的可变对象类型。
不可变对象
- 对象状态无法修改。一旦对象被创建,我们就不能添加、删除或更新元素。
- String、Integer、Tuples、Frozenset 是 Python 中的一些不可变对象类型。
同质/异构数据结构有什么区别?
- 同质数据结构 – 数据元素将具有相同的数据类型(例如:数组)。
- 异构数据结构 – 数据元素可能不是相同的数据类型(例如:列表、元组、集合等)。
什么是原始数据类型和非原始数据类型?
在了解内置数据结构的功能之前,让我们先看看一些将与数据结构对象一起使用的内置函数。
- dir(obj) – 一个内置函数,它将返回属性和方法。
- len(obj) – 返回对象的长度(项目数)。参数可以是序列(例如字符串、字节、元组、列表或范围)或集合(例如字典、集合或冻结集合)。
- del – 此内置关键字用于从命名空间中删除对象或从对象(如列表、字典等)中删除项目。
- type(obj) – type() 函数返回对象的类型或根据传递的参数返回新类型对象。
- id() – 该函数返回对象的“身份”。这是一个整数,保证该对象在其生命周期内是唯一且恒定的。
现在您已经看到了一些重要的细节,让我们继续讨论 Python 数据结构。
Python带有内置的数据结构,用户也可以定义自己的数据结构。内置的数据结构包括LIST、DICTIONARY、TUPLE和SET。用户定义的数据结构的一些示例是STACK、QUEUES、TREE、HASHMAP等……
来自其他编程语言的人将会非常熟悉数组类型。但在Python中,它们并不常见。
这里的列表有点类似于数组,但列表允许我们存储任何数据类型(异构)的值,而数组仅保存特定类型的数据(int、float 等...)。要使用数组,您必须显式从“array”模块导入数组。
在这个 Python 系列文章中,我们将了解什么是数据结构和Python 内置数据结构。
列表
列表是一种数据结构,它是不同数据类型的集合。 “不同数据类型的集合”是什么意思? 列表可以存储字符串、整数、浮点值、嵌套列表等。
列表对象是“可变”,这意味着可以访问、修改或删除列表中创建的项目。列表支持索引。列表中的每个项目都分配给一个地址,并且该地址可用于访问或修改特定项目值。
- 创建一个列表
- 插入/访问/修改列表
- 删除列表
创建列表
可以使用方括号创建列表。
>>> name_empty = [] # Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'] # list with string data type
>>> name_int = [1,2,3] # list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14] # list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]
我们可以使用内置的type()
函数来检查对象类型。
>>> type(name)
我们可以使用 dir()
函数访问 list 实例的方法和属性。
>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
我们可以使用 len() 方法找出列表中的项目总数。
>>> len(name)
我们可以使用 list.copy() 方法从现有列表创建新列表。
>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
插入/访问/修改列表
我们可以使用 list.insert(i, x)
方法将项目插入列表中的任何位置。
>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom') # Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'] # Tom is inserted at the 0th position.
我们可以使用list.append(x)
方法将单个项目追加到列表中。这会将项目插入到列表的末尾。
>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']
我们可以使用list.extend()
方法将多个项目添加到列表中。
>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
我们还可以使用'+'
运算符来组合两个列表。两个列表可以具有不同的数据类型。
>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']
正如已经指出的,对象是可变的。可以通过引用索引位置并为其赋值来修改列表项。
>>> name # Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name # After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
列表支持正向和负向索引。
索引从0开始,负索引从-1开始。
我们可以使用列表项的索引位置来访问它们。
>>> name[0] # Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1] # Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'
我们还可以使用切片来访问列表中的项目。切片允许我们通过定义开始、结束、步骤参数来访问一系列项目。
SYNTAX: list[starting position, ending position, Step]
>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']
我们可以使用 list.count(x) 方法找到给定值出现的次数。
>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3
我们可以使用 list.index(x[, start[, end]]) 方法找到给定项目的索引位置。
>>> name # Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will) # Returns the index position of first occurence of x.
0
>>> name.index('Will',2) # Starting index positon’2’ is given.
7
>>> name.index('Will',2,4) # Starting and Ending Index position is given. Since there is no occurence of ‘Will’ within the given search position it will throw Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in
ValueError: 'Will' is not in list
我们可以使用list.reverse()
方法来反转列表中的项目。
>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']
删除列表
我们可以使用 list.pop(x)
方法从列表中的 x
位置删除项目。此函数将从列表中删除该项目并显示已删除的项目。如果未指定 x ,则 pop() 方法将返回列表中的最后一项。
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'
我们还可以使用list.remove(x)
方法从列表中删除项目。这里,x
获取项目的值,如果 x
不在列表中,则抛出 ValueError。
>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
File "", line 1, in
ValueError: list.remove(x): x not in list
我们可以通过将列表名称分配给方括号或使用 list.clear() 方法将列表清空。
>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []
>>> name
[]
>>> name1.clear()
>>> name1
[]
我们可以使用内置关键字 del
来执行此操作,而不是使用列表方法将列表清空或从列表中删除项目。 “del”关键字可以从内存中删除列表对象或从列表中删除项目或从切片中删除项目。
>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]
内置的id()
函数返回对象的“身份”。这是一个整数,保证该对象在其生命周期内是唯一且恒定的。
>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
File "", line 1, in
NameError: name 'name' is not defined
注意:我们使用 del()
从内存中删除了列表变量,因此它会抛出名称错误。
help() funtion:
内置帮助 function()
对于获取有关特定对象或该对象的方法的详细信息非常有用。
help(object)
help(object.method)
概括
到目前为止,在本文中,我们已经了解了如何使用列表数据结构通过列表方法来存储、访问、修改、删除列表对象。我们还看到了一些内置函数,例如 id()、dir()、type()、help()< 这是非常有效的功能。我们还在 python 中提供了列表理解,它提供了一种更简洁、更易读的创建列表的方法。