Python基础教程

009_Python列表类型list

Python列表类型list

Python列表类型list的理解

Python中列表list(序列)的实质是动态数组。

数组(普通数组)主要用来表示相同类型的一串数据,定义时需要给定长度,而且给定后,此长度不可变。

动态数组的特征就是数组的长度可变(内部通过定长数组来实现,当超过默认长度后就重新创建更长的数组,比如每次扩大一倍)。

列表list与C++中的vector内存管理相同。列表具有动态数组共性特点,还有Python自身特点。

  • 列表list的长度可变,这是动态数组的特性(普通数组的长度不可变)。
  • 列表list的元素可以通过索引(下标)访问,这是数组的特性。
  • 列表list的内存是连续的,因为动态数组就是数组,不是链表。Python中的列表list是数组(动态变长),其他语言(如C++)中的list是链表(内存不连续)。
  • Python中列表list下标允许是负值,而其他数组不可以。
  • Python中列表list允许存储不同数据类型变量,还可以任意嵌套,而其他数组不可以。
  • 数组插入元素速度慢,末端添加元素速度快,Python中列表list也是如此。

Python列表list可以存储不同类型数据,包括嵌套。一般建议列表list存储相同类型数据。

list1=[1,2,3]
list2=[1.1,2.4,3.6]
list3=["a","abc","mm"]
list4=[1,2,3,"a","abc","mm",1.1,2.4,3.6]
list5=[1,2,3,[1.1,2.4,3.6,["a","abc","mm"]]]
print(list1)
print(type(list1))
print(list2)
print(list3)
print(list4)
print(list5)

运行结果如下。

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
[1, 2, 3]
<class 'list'>
[1.1, 2.4, 3.6]
['a', 'abc', 'mm']
[1, 2, 3, 'a', 'abc', 'mm', 1.1, 2.4, 3.6]
[1, 2, 3, [1.1, 2.4, 3.6, ['a', 'abc', 'mm']]]

Process finished with exit code 0

列表list的创建与增删改查

列表list的创建。使用方括号[],元素之间用逗号","隔开,最后一个元素没有逗号(写了也没事)。

列表list的添加。使用list对象的append()、insert()方法。

列表list的删除。可以del语句。也可以使用list对象的pop()、remove()、clear()方法。

列表list的访问(查)。使用list对象和[]及下标索引,相当于get。索引默认从0开始。负值索引表示从尾开始。

列表list的修改。使用list对象和[]及下标索引,先查找到,再修改,相当于set。

# 创建list对象
mylist=[]
# 添加list元素
mylist.append(10)
mylist.append(15)
mylist.append(20)
print(mylist)         # [10, 15, 20]
# 访问list元素
print(mylist[0])      # 10
print(mylist[1])      # 15
print(mylist[2])      # 20
# 修改list元素
mylist[1]=16
mylist[2]=mylist[2]+50
print(mylist)         # [10, 16, 70]
# 删除list元素
del mylist[1]
print(mylist)         # [10, 70]

列表list的遍历

Python列表list的遍历常见有3种:通过迭代器遍历、通过索引遍历、通过enumerate函数遍历。

(1)通过迭代器遍历

mylist=[9,5,2,7]
for item in mylist:
    print(item)

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
9
5
2
7

Process finished with exit code 0

(2)通过索引遍历

内置函数len()可以获取list的长度。

内置函数range()可以生成数列,这里可以生成与list索引相同的数列。

mylist=[9,5,2,7]
for i in range(len(mylist)):
    print(mylist[i])

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
9
5
2
7

Process finished with exit code 0

(3)通过enumerate函数遍历

内置函数enumerate()可以同时列出数据和数据下标。

mylist=[9,5,2,7]
for index,item in enumerate(mylist):
    print(index,item)

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
0 9
1 5
2 2
3 7

Process finished with exit code 0

当然,大家也可以自己实现数据与下标的对应

i=0
mylist=[9,5,2,7]
for suiyi in mylist:
    print(i,mylist[i])
    i=i+1

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/py001/t09.py
0 9
1 5
2 2
3 7

Process finished with exit code 0

切片

单个元素访问时,下标默认从0开始,最后一个元素为len-1。

切片访问时,下标起始值的范围是0到len-1,下标终止值的长度最大为len(这个值超过了索引范围)。下标终止值对应的元素不计算在内。比如下面程序中mylist[2]与mylist[2:3]表示的数据相同(格式不同)。

mylist=[9,5,2,7]      # 下标: 0 1 2 3
print(mylist[2])      # 2
print(mylist[2:3])    # [2]
print(mylist[2:4])    # [2, 7]
#print(mylist[4])     # IndexError: list index out of range
print(mylist[0:2])    # [9, 5]
print(mylist[-1])     # 7
print(mylist[-2])     # 2
print(mylist[:])      # [9, 5, 2, 7]
print(mylist[2:])     # [2, 7]
print(mylist[-3:])    # [5, 2, 7]
print(mylist[:-1])    # [9, 5, 2]

切片中负值索引表示位置,比如-1就是最后一个元素,-2就是倒数第二个元素。

列表list的+和*

list1=[1,2,3]
list2=[4,5,6,7,8]
list3=list1+list2
list4=list1*5
print(list1)        # [1, 2, 3]
print(list2)        # [4, 5, 6, 7, 8]
print(list3)        # [1, 2, 3, 4, 5, 6, 7, 8]
print(list4)        # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

列表list的函数

len(list):列表元素个数

list(seq):将元组转换为列表

max(list):返回列表元素最大值

min(list):返回列表元素最小值

cmp(list1, list2):比较两个列表的元素

列表list的方法

list.append(obj):在列表末尾添加新的对象

list.count(obj):统计某个元素在列表中出现的次数

list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

list.index(obj):从列表中找出某个值第一个匹配项的索引位置

list.insert(index, obj):将对象插入列表

list.pop([index=-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

list.remove(obj):移除列表中某个值的第一个匹配项

list.reverse():反向列表中元素

list.sort(cmp=None, key=None, reverse=False):对原列表进行排序

这篇文章对您有用吗?

我们要如何帮助您?