Python序列结构--列表(一)
列表
列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**。但插入和删除非尾部元素时涉及列表元素大量的移动,会严重影响效率,因此尽量从尾部进行元素的追加与删除操作
同一列表中的元素的数据类型可以各不相同,例如:
>>> [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采用基于值的自动内存管理模式,变量并不直接存值,而是存储值的引用或内存地址**
列表的创建与删除
使用“=”直接将一个列表赋值给变量即可创建列表对象,也可以使用list()函数把元组、range对象、字符串、字典集合或其他可迭代对象转换为列表
>>> a_list = ['a','b','mpilgrim']
>>> a_list = [] # 创建空列表
>>> x = list() # 创建空列表
>>> x
[]
>>> list((3,5,4,9,3,8))
[3, 5, 4, 9, 3, 8]
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
>>> list(range(1,9,2))
[1, 3, 5, 7]
>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> list({3,5,7})
[3, 5, 7]
>>> list({'a':3,'b':9,'c':78})
['a', 'b', 'c']
>>> list({'a':3,'b':9,'c':78}.items())
[('a', 3), ('b', 9), ('c', 78)]当一个列表不再使用时,可以使用del命令将其删除,这一点适用于所有类型的Python对象,del命令并不删除变量对应的值,只是删除变量并解除变量和值绑定。Python内部每个值都维护一个计数器,每当有新的变量引用该值时其引用计数器加1,当该变量删除或不再引用该值时其计数器减1,当某个值的计数器变为0时则垃圾回收器负责清理和删除。如果需要立即进行垃圾回收,可以导入gc模块后调用collect()方法
>>> x = [1,2,3]
>>> del x # 删除列表对象
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> import sys
>>> sys.getrefcount(1) # 查看值的引用对象
97
>>> x = 1
>>> sys.getrefcount(1) # 有新变量引用该值,其计数器加1
98
>>> y = 1
>>> sys.getrefcount(1)
99
>>> del x
>>> sys.getrefcount(1) # 删除变量并解除引用,其计数器减1
98
>>> del y
>>> sys.getrefcount(1)
97
>>> import gc
>>> gc.collect() # 立刻进行垃圾回收,返回被清理的对象数量
0
列表元素的访问
创建列表之后,可以使用整数作为下标来访问其中的元素,支持双向索引。
>>> 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]
Python序列结构--列表(一)的更多相关文章
- python 序列结构-列表,元组,字典,字符串,集合
列表 """ name_list.__add__( name_list.__getslice__( name_list.__new__( name_list.append ...
- Python序列结构
python中常用的序列结构由列表.元组.字典.字符串.集合等,列表.元组.字符串等有序序列以及range对象均支持双向索引 是否有序 序列结构 是否是可变序列 有序序列 元组 不可变序列 有序序列 ...
- Python 序列、列表(List)、元组(Tuple)
序列 序列是Python中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...
- Python序列之列表(一)
在Python中,列表是一种常用的序列,接下来我来讲一下关于Python中列表的知识. 列表的创建 Python中有多种创建列表的方式 1.使用赋值运算符直接赋值创建列表 在创建列表时,我们直接使用赋 ...
- Python序列结构--集合
集合:元素之间不允许重复 集合属于Python无序可变序列,元素之间不允许重复 集合对象的创建与删除 直接将值赋值给变量即可创建一个集合 >>> a = {3,5}>>& ...
- Python序列结构--字典
字典:反映对应关系的映射类型 字典(dict)是包含若干“键:值”元素的无序可变序列 字典中元素的“键”可以是python中任意不可变数据,例如整数.实数.复数.字符串.元组等类型可哈希数据,“键”不 ...
- Python序列结构--元组
元组:轻量级列表 元组创建于元素访问 >>> x = (1, 2, 3)>>> type(x)<class 'tuple'>>>> x ...
- Python序列之列表 (list)
作者博文地址:http://www.cnblogs.com/spiritman/ 列表是Python中最基本的数据结构,是Python最常用的数据类型.Python列表是任意对象的有序集合,通过索引访 ...
- python序列元素引用容易出错的地方
python序列分列表和元组,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可.举个简单的例子,a1是一个元组,a2是一个列表 ...
随机推荐
- java细节知识
代码优化细节 (1)尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是fin ...
- Python3 复制和深浅copy
赋值: 列表的赋值: list1 = ['peter','sam'] list2 = list1 print(list1,id(list1)) print(list2,id(list2)) list1 ...
- Ubuntu输入命令无效的问题
https://blog.csdn.net/u014797226/article/details/80800550?utm_source=blogxgwz2 Ubuntu启动时输入密码后,一直停留在登 ...
- 《深入理解JAVA虚拟机》----------第二章 JAVA内存区域与内存溢出异常,笔记(下)
2. HotSpot虚拟机对象探秘 2.1 对象的创建 虚拟机遇到一条New指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初 ...
- spring okhttp3
准备工作 在pom.xml文件中增加以下依赖 <dependency> <groupId>com.squareup.okhttp3</groupId> <ar ...
- [转]MAC系统下Sublime Text3 配置Python3详细教程(亲测有效)
原文地址: https://blog.csdn.net/weixin_41768008/article/details/79859008?tdsourcetag=s_pctim_aiomsg 这段时间 ...
- 做u盘启动重装系统 进winPE 出现 cdboot:couldn't find ntldr 解决办法
公司的QA本来用的ubuntu系统 觉得不是很好使 就找我重装win10系统 之前有重装过系统 就信心满满的答应了 我拿出U盘 把U盘格式化了下 去下载了个雨林木风的win10 系统(ISO文件) ...
- 基于Gitlab统计代码行--统计所有仓库、所有提交人的代码总行数(新增加-删除)
公司绩效考核要求,统计GITLAB仓库所有人提示有效代码行业 脚本1: 统计所有仓库.所有提交人的代码总行数(新增加-删除) 脚本2: 统计所有仓库.所有提交人的代码提交汇总与删除汇总 脚本3: 统计 ...
- easyui 回车搜索
代码: js: // 搜索 $("#searchButton").click(function() { var ip = $("#searchIp").val( ...
- tiny4412 --uboot移植(1)
开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...