Python序列结构--列表(一)

时间:2019-03-05 22:47:16   收藏:0   阅读:295

列表

列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**。但插入和删除非尾部元素时涉及列表元素大量的移动,会严重影响效率,因此尽量从尾部进行元素的追加与删除操作
?
同一列表中的元素的数据类型可以各不相同,例如:
>>> [10,20,30,40]
[10, 20, 30, 40]
>>> [‘crounchy frog‘,‘ram bladder‘,‘lark vomit‘]
[‘crounchy frog‘, ‘ram bladder‘, ‘lark vomit‘]
>>> [‘spam‘,2.0,5,[20,30]]
[‘spam‘, 2.0, 5, [20, 30]]
>>> [[‘file1‘,200,7],[‘file2‘,260,9]]
[[‘file1‘, 200, 7], [‘file2‘, 260, 9]]
**python采用基于值的自动内存管理模式,变量并不直接存值,而是存储值的引用或内存地址**

列表的创建与删除

列表元素的访问

创建列表之后,可以使用整数作为下标来访问其中的元素,支持双向索引。
>>> x = list(‘Python‘)
>>> x
[‘P‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]
>>> x[0]
‘P‘
>>> x[-1]
‘n‘
>>> x[1]
‘y‘
>>> x[-2]
‘o‘

列表常用方法

列表对象常用的方法
方法说明
append(x) 将x追加至列表尾部
extend(L) 将列表L中所有元素追加至列表尾部
insert(index, x) 在列表index位置处插入x,index如果超出了列表长度,则在其尾部或头部插入元素x
remove(x) 在列表中删除第一个值为x的元素
pop([index]) 删除并返回列表中下标为index的元素,如果不指定index则默认为-1,弹出最后一个元素
clear() 清空列表,删除列表中的所有元素,保留列表对象
index(x) 返回列表中第一个值为x的元素的索引,若不存在则抛出异常
count(x) 返回x在列表中出现的次数
reverse() 对列表所有元素进行原地逆序
sort(key=None, reverse=False) 对列表所有元素进行原地排序,key用来指定排序规则,reverse为False表示升序,True表示降序
copy() 返回列表的浅复制
append()、insert()、extend()
>>> x = [1,2,3]
>>> id(x) # 查看对象的内存地址
1513107356296
>>> x.append(4) # 在尾部追加元素
>>> x
[1, 2, 3, 4]
>>> x.insert(0,0) # 指定位置插入元素
>>> x
[0, 1, 2, 3, 4]
>>> x.extend([5,6,7]) # 尾部追加多个元素
>>> x
[0, 1, 2, 3, 4, 5, 6, 7]
>>> id(x)
1513107356296
pop()、remove()、clear()
>>> x = [1,2,3,4,5,6,7]
>>> x.pop()    # 弹出并返回尾部元素
7
>>> x
[1, 2, 3, 4, 5, 6]
>>> x.pop(0) # 弹出并返回指定位置的元素
1
>>> x
[2, 3, 4, 5, 6]
>>> x.clear() # 删除所有元素
>>> x
[]
>>> x = [1,2,1,1,2]
>>> x.remove(2) # 删除首个值为2的元素
>>> x
[1, 1, 1, 2]
>>> del x[3] # 删除指定位置上的元素
>>> x
[1, 1, 1]
count()、index()
>>> x = [1,2,2,3,3,3,4,4,4,4]
>>> x.count(2) # 元素2在列表x中出现的次数
2
>>> x.count(4)
4
>>> x.count(5)
0
>>> x.index(3) # 返回3在列表x中首次出现的索引
3
>>> x.index(5)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: 5 is not in list
为避免引发异常而导致程序崩溃,1.使用选择结构确保列表中存在指定元素在调用有关的方法,2.使用异常处理结构
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from random import sample
lst = sample(range(100, 1000), 500)
while True:
   x = input(‘请输入一个三位数:‘)
   try:
       assert len(x) == 3, ‘长度必须为3‘
       x = int(x)
       break
   except:
       pass
if x in lst:
   print(‘元素{0}在列表中的索引为:{1}‘.format(x, lst.index(x)))
else:
   print(‘列表中不存在该元素‘)
   
# 执行结果
D:\pycode\python_s3\venv\Scripts\python.exe D:/pycode/python_s3/day10/LearnList.py
请输入一个三位数:11
请输入一个三位数:1235
请输入一个三位数:339
列表中不存在该元素
?
Process finished with exit code 0
# 再次执行结果
D:\pycode\python_s3\venv\Scripts\python.exe D:/pycode/python_s3/day10/LearnList.py
请输入一个三位数:339
元素339在列表中的索引为:20
?
Process finished with exit code 0
sort()、revers()
>>> x = list(range(11))
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> import random
>>> random.shuffle(x)
>>> x
[2, 7, 8, 10, 3, 6, 1, 9, 5, 4, 0]
>>> x.sort() # 默认规则排序
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x.sort(key=str) # 按转换为字符串后的大小排序
>>> x
[0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.sort(key=lambda item:len(str(item)),reverse=True) # 按转换为字符串以后长度降序排序
>>> x
[10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.reverse()
>>> x
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 10]

原文:https://www.cnblogs.com/zxbdboke/p/10480151.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!