python_7_列表
什么是列表?
--一种数据类型
-- 形式:[值1,值2,[值a,值b],值3] --可以嵌套
#!/usr/bin/python3 list_a = [1, 2, [3, 'a']]
对于列表有哪些操作?
--取值 -- list[index] -- list[-1] 取最后一个值
--知元素,查位置:列表名.index(‘元素名’)
#!/usr/bin/python3
list_a = [1, 2, [3, 'a']]
print(list_a[0]) # 索引从0开始
print(list_a[2][1]) # 嵌套循环,需要嵌套查询
try:
print(list_a.index('a'))
except Exception as e:
print(e)
print('why?')
print('因为index()和for 遍历一样,只能遍历一层,[3, a],被当做一个元素')
--插入 -- .insert(位置,一个元素) -- .append(‘元素’) - 最后追加一个元素
#!/usr/bin/python3
list_a = [1, 2, [3, 'a']]
try:
list_a.insert(5, 'b') # 当索引位置大于原来列表索引,默认最后添加'b'
print(list_a)
list_a.insert(1, 4) # 在索引 = 1的位置添加4,原来在1位置的往后退一位
print(list_a)
list_a.append('c') # 在最后添加'c'
except Exception as e:
print(e)
--切片
--[start:end:step] 顾头不顾尾,前面从0开始,0可省去,后面从-1开始,降序
-- 取前面2个值: 列表[0:2] 或 列表[:2]
-- 取后面2个值: 列表[-3:-1] 或 列表[-2:]
-- 取到倒数第2个值: 列表[0:-2]
-- 取从索引2到最后的值: 列表[2:]
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5]
try:
# 切片也是顾头不顾尾
slice_1 = list_a[:2] # 取前面两个值
slice_2 = list_a[:-2] # 取到倒数第2个值,不包括倒数第2个值
slice_3 = list_a[2:] # 从第2个值取到最后
slice_4 = list_a[-2:] # 取倒数2个值
print(slice_1)
print(slice_2)
print(slice_3)
print(slice_4)
except Exception as e:
print(e)
-- 删除
-- .remove(“元素”) <=> del 列表[ index ]
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5]
try:
list_a.remove(1) # 移除已知元素值
print(list_a)
del list_a[2] # 知道索引,删除值
print(list_a)
except Exception as e:
print(e)
-- .pop(index) - 不填index删除最后一个 -唯一删除有返回值 = 删除元素
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5]
try:
result_1 = list_a.remove(1) # 尝试接收删除的值
print(result_1)
result_2 = list_a.pop(1) # 尝试接收删除的值,唯一有返回值,写索引,按索引删,不写,从最后一个删除
print(result_2)
except Exception as e:
print(e)
-- .clear - 清空列表
-- .del 列表 - 删除列表
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5]
try:
list_a.clear() # 置空列表
print(list_a)
del list_a # 删除列表
print(list_a) # 尝试打印已经删除的列表,触发异常
except Exception as e:
print(e) # 打印异常
-- 统计
-- .count(“元素”) - 统计列表中有多少个同样的元素
-- len(列表) - 统计列表中有多少个同样的元素
-- 反转 -- .reverser() - 原列表翻转过来
-- 排序 -- .sort() - 数字小到大,母A-Z-a-z
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5, 6, 6, 5]
try:
count = list_a.count(6) # 计算列表中6个个数
print(count)
len_a = len(list_a) # 计算列表的长度,每个嵌套的都看作一个元素,对于一层
print(len_a)
list_a.reverse() # 把列表反转过来,改变原来的列表
print(list_a)
list_a.sort() # sort只能对普通列表排序,不能排序嵌套列表
print(list_a)
except Exception as e:
print(e) # 打印异常
-- 扩展 -- .extent(列表2) - 列表2还存在
-- 复制 -- .copy() - 浅浅拷贝 ,大坑,只针对一层,列表机制决定
#!/usr/bin/python3
list_a = [1, 2, [3, 'a'], 4, 5, 6, 6, 5]
list_b = [88, 99, 100]
try:
list_a.extend(list_b) # 用list_b扩展list_a,list_b并没有改变
print('list_a:', list_a)
print('list_b:', list_b)
list_c = list_a.copy() # 进行list_a的拷贝,浅浅拷贝
print('list_c:', list_c)
list_c[1] = 'c' # 对list_c进行一层修改
list_c[2][1] = 'b' # 对list_c进行嵌套层修改
print('list_a:', list_a)
print('list_c:', list_c)
print('突然发现,嵌套层也会跟着修改,copy只是拷贝一层')
print('那如何解决呢?')
except Exception as e:
print(e) # 打印异常
-- import copy ist_deep =copy.deepcopy(list_a)
- 完全拷贝一份,深深拷贝
#!/usr/bin/python3
import copy
list_a = [1, 2, [3, 'a'], 4, 5, 6, 6, 5]
list_b = [88, 99, 100]
try:
list_c = copy.deepcopy(list_a) # 进行list_a的拷贝,深深拷贝
print('list_c:', list_c)
list_c[1] = 'c' # 对list_c进行一层修改
list_c[2][1] = 'b' # 对list_c进行嵌套层修改
print('list_a:', list_a)
print('list_c:', list_c)
print('突然发现,嵌套层不会跟着修改,deepcopy会完全拷贝')
print('真是大天坑,少侠,踩坑了木有')
except Exception as e:
print(e) # 打印异常
什么是元组?
--上了枷锁的列表,一旦定义,无法修改,但可以切片
-- 形式(元素1,元素2,......) --声明此数据不要更改
#!/usr/bin/python3
tuple_1 = (1, 2, 4, 'a')
try:
print(tuple_1.count(1)) # 统计 1 的个数
print(tuple_1.index(4)) # 打印 4 的索引
print(tuple_1[:2]) # 取前面2个值,切片出来的值还是元组
except Exception as e:
print(e) # 打印异常
如何把[1, 5, 6, [2, 7, [3, [4, 5, 6]]]]变成[1, 5, 6, 2, 7, 3, 4, 5, 6]?
思考:
-- for循环每次都遍历列表一层
-- 把取出的单个值加入到新的列表中
-- 把取出来的嵌套列表变成新的遍历列表,就需要在for循环外嵌套一个while循环
-- 当取到最里面的列表嵌套时候,对最后一个值进行处理
#!/usr/bin/python3
import time
list_1 = [1, 5, 6, [2, 7, 7, [3, [4, 5, 6]]]] # 定义一个嵌套列表
list_1_new = list_1 # 定义递归接收嵌套列表
list_2 = [] # 定义接收取出数据的空列表
count = 0 # 循环计数,用于循环列表长度计数
while True: # 开始循环
try:
for i in list_1_new: # 每次循环都打印一层
count += 1
if count < len(list_1_new): # 计算小于初始列表的长度,取出一层数据
list_2.append(i)
elif count == len(list_1_new): # 当计数长度等于初始列表长度,取出二层嵌套列表
list_1_new = i # 把初始列表变成取出的上面取出的嵌套列表,变成变成遍历初始列表的二层嵌套
count = 0 # 计算清零
except Exception as e: # 出现异常打印异常
print(e)
print(list_2) # 打印每次遍历已经添加的值
print(list_1_new) # 打印每次取出的嵌套列表
try:
len(list_1_new) # 假如最后只有一个值的时候,触发len()异常
except TypeError as e:
print(e)
list_2.append(list_1_new) # 把最后一个值添加进去
break # 把最后一个值添加进去跳出循环
print(list_2) # 打印最好的值
没有解决一个问题:
-- 这个问题本身很特殊,有点递归嵌套,无法解决一层有2个以上的嵌套列表
如何解决 ['a', 'b', 1, ['c', [2, 'd'], 3, 4, 5, ['e', 6, 'f', ], 7], 8] 变成普通列表?
#!/usr/bin/python3
list_1 = ['a', 'b', 1, ['c', [2, 'd'], 3, 4, 5, ['e', 6, 'f', ], 7], 8] # 初始列表
list_1_new = list_1 # 循环映射列表
list_a = [] # 循环添加 取出的单个值
list_c = [] # 循环接收 取出来的嵌套列表,一个中间列表
while True: # 开始循环
for i in list_1_new: # 开始循环取值
try:
if len(list_1): # 判断取出是否是整数,是整数触发异常
try:
if i.isalnum(): # 判断取出是否是字符串,不是字符串触发异常
list_a.append(i) # 是字符串添加到list_a中去
except Exception as e: # 触发不是字符串异常
print(e)
list_c.extend(i) # 把取出的嵌套列表加入到list_c中
list_1_new = list_c # 循环list_1_new指向嵌套列表,指向list_c
print(list_1_new) # 打印list_1_new值
except Exception as e: # 触发整数len()方法异常
print(e)
list_a.append(i) # 是整数添加到list_a中去
count = 0 # 判断取到最后的嵌套列表中是否还有嵌套列表
for i in list_c: # 循环二层嵌套列表
try: # 尝试判断最后一层嵌套列表是否嵌套,如果嵌套,异常次数就会少于列表长度
len(i) # 整数触发异常
i.isalnum() # 不是字符串触发异常
except Exception as e:
print(e)
count += 1 # 每出现一次异常,异常次数加1
if count == len(list_c): # 判断异常次数是否等于最后循环列表长度,如果等于,就确认已经循环了最后一层列表,退出整个循环
break
list_c = [] # 置空中间列表,接收下一层嵌套列表
print(list_a)
print(list_1_new)
print(list_a)
set_a = set(list_a) # 把最后的结果去重,把列表转换成集合,集合天生去重
print(set_a, )
# 逻辑整理
# 本质上通过for循环特性,for循环只能遍历一层
# 通过遍历,把取出来的单个值进行判断,把符合要求的加入到新的列表中,把不符合的添加到中间列表中
# 最难的是,如何判断最后的循环?
# 我的想法是,通过最后中间列表的遍历,判断是否还有嵌套列表,通过异常次数和列表长度比较,
# 如果中间列表等于异常次数,说明循环到了最后的列表,退出整个循环
# 最后把结果列表变成集合,利用集合天生去重性质,进行去重
-- 以上完美解决了任何嵌套列表变成普通列表的问题
python_7_列表的更多相关文章
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- Python列表去重
标题有语病,其实是这样的: 假设有两个列表 : L1 = [1,2,3,4] ; L2 = [1,2,5,6] 然后去掉L1中包含的L2的元素 直接这样当然是不行的: def removeExists ...
- WPF 微信 MVVM 【续】修复部分用户无法获取列表
看过我WPF 微信 MVVM这篇文章的朋友,应该知道我里面提到了我有一个小号是无法获取列表的,始终也没找到原因. 前两天经过GitHub上h4dex大神的指导,知道了原因,是因为微信在登录以后,web ...
- Emoji选项列表
一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
随机推荐
- iOS中的zxing集成步骤
参照网上各大神文章,自己总结了下如下,欢迎大家指正与交流!(主参照:http://blog.csdn.net/brokge/article/details/9045629) 1. 到 github下载 ...
- Promise实现小球的运动
Promise简要说明 Promise可以处理一些异步操作:如像setTimeout.ajax处理异步操作是一函数回调的方式;当然ajax在jQuery版本升级过程中,编写方式也有所变动. P ...
- 三目运算:and/or 技巧
三目运算:and/or 技巧 and, or 联合起来有个小技巧: print 2 < 3 and True or False 说明: 如果 2 小于 3 了,则输出 True , ...
- Redis in Docker on Linux Container
记录:在Docker中运行一个Redis实例当我们在Windows系统中安装好Docker以后,在Hyper-V中会自动创建一个Linux虚拟机,如果这个虚拟机没有运行,说明当前运行的是Windows ...
- Mybatis中常用的SQL
1.BaseResultMap <resultMap id="BaseResultMap" type="com.stylefeng.guns.common.pers ...
- H5+Ajax+WebApi实现文件下载(进度条,多文件)
前言 踩过的坑 1.WebAPI跨域 2.Jquery ajax低版本不支持XHR 2功能 3.Jquery ajax不支持Deferred的process事件 4.IE下文件名乱码问题 功能实现 & ...
- Java与算法之(1) - 冒泡排序
冒泡排序法的原理是,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来. 例如对4 3 6 2 7 1 5这7个数字进行从小到大的排序,从最左侧开始,首先比较4和3 因为是从小到大排序,4和3 ...
- MongoDB建立主从复制小案例(一主一从)
花了两天学习了mongoDB, 今天接触到了mongo的主从配置, 把它记下来 1. 开启两个mongo服务器(用于一主一从, 没有加安全验证相关参数 : 可以使用mongd-help查看) mong ...
- 如何让一个DIV水平,垂直方向都居中于浏览器?
<style type="text/css"><!-- div {position:absolute;top:50%;left:50%;margin:-150px ...
- HUST 1583 长度单位
1583 - 长度单位 时间限制:1秒 内存限制:128兆 536 次提交 103 次通过 题目描述 我们生活中常用的长度单位有英尺.英寸和厘米,众所周知它们之间的换算关系每英寸等于3厘米,而每英尺等 ...