Python list
列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
创建列表
list1 = [1, 2, 3, 4, 5, 6, 7]
list2 = [['a', 'b'], 'c']
# 创建空列表
list3 = []
list4 = list()
列表切片、拼接
示例:
list1 = [1, 2, 3, 4, 5, 6, 7]
list2 = ['a', 'b', 'c']
print(list1[2 : 4]) # 读取第3到第4个数据(左开右闭)
print(list1[-3]) # 从右开始读取第三个数据
print(list1[: 5]) # 读取前5个数据
print(list1[0 : -1 : 2]) # 每隔一个数据读一个数据
print(list1[:: -1]) # 倒序打印列表
print(list1 + list2) # 将list1和list2拼接起来
输出结果:
[3, 4]
5
[1, 2, 3, 4, 5]
[1, 3, 5]
[7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 'a', 'b', 'c']
列表嵌套
列表中的元素不仅可以是字符串或数字,还可以是字典、集合或是其他列表
list1 = [1, 2, 3, 4, 5]
list2 = [2, 2, 2, 2, 2]
list3 = [list1, list2]
print(list3)
print(list3[0][3:])
输出结果:
[[1, 2, 3, 4, 5], [2, 2, 2, 2, 2]]
[4, 5]
函数和方法
函数
函数 | 作用 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
方法
方法 | 作用 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index,obj) | 将对象插入列表(通过index指定位置) |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 =del list[-1] |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(key=None,reverse=False) | 对原列表进行排序,(可以通过 key 传入函数对数据进行处理之后排序) |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
list.sort()
list.sort()
可以将 list 进行排序,通过传入参数可以指定排序依据的字段
示例:
def get_sort_key(list_):
return len(list_[1])
a = [('a', [1, 2]), ('b', [1, 2, 3]), ('c', [1])]
a.sort(key=get_sort_key)
print(a)
输出结果:
[('c', [1]), ('a', [1, 2]), ('b', [1, 2, 3])]
注意
在循环列表的同时进行修改,可能导致一些问题:
有元素被跳过:
def main():
a = [1, 2, 3, 4, 5, 6, 7]
for x in a:
if x > 3:
a.remove(x)
print(a)
b = [1, 2, 3, 4, 5, 6, 7]
for x in b[:]:
if x > 3:
b.remove(x)
print(b)
if __name__ == '__main__':
main()
输出结果:
[1, 2, 3, 5, 7]
[1, 2, 3]
很明显,b 的循环结果才是想要的结果,a 在循环时跳过了一些元素
因为 b[:]
是 b
的一个复制,并没有被修改
其他数据结构
由于列表的特性,可以用它来简单模拟其他的数据结构
栈
class Stack(object):
def __init__(self):
self.stack = list()
def push(self, data):
"""
进栈函数
"""
self.stack.append(data)
def pop(self):
"""
出栈函数,
"""
return self.stack.pop()
def gettop(self):
"""
取栈顶
"""
return self.stack[-1]
队列
class Queue(object):
def __init__(self):
self.queue = list()
def put(self, data):
self.queue.append(data)
def get(self):
return self.queue.pop(0)
def qsize(self):
return len(self.queue)