Python中的List知识

“”"
List列表的作用:
1:存放数据,并且list存放数据是安全的,但是不能存放大数据的东西,例如:音频、视频、图片等。
2:list可以遍历数据库的结果集,后续讲解MySQL、Oracle和Python操作。————重点内容
3:list的底层原理是一个bean容器。————重点

“”"
#定义List列表[]
my_list1 = [] #空列表 思考? []其实就是一个内存空间,所以list可以在[]里存放数据。
my_list2 = [10] #10表示给list列表开辟大小为10的空间内存
my_list3 = [‘saber’,‘archer’,‘lancer’,‘berserker’] #给列表赋值 表示内存里面有4个字符串
#扩展:String str = new String(‘abc’) ? 产生几个对象? ——2个 研究堆栈内存的原理
#重点——列表里可以存放任意类型的东西————list其实也是面向对象
my_list4 = [‘hello’,12,12.0,True,‘蛋哥’]
“”"
2:如何操作列表
备注:如果后面或去企业拿到一个新技术,此技术只要可以存放数据,那么这个技术的核心就是CRUD(增加、删除、查询、修改)
(1):list列表通过下标index获取值
下标的工作原理:
i:下标是可以被改变的,更改下标对list的内存空间没有任何的影响
ii:主键primary key id = 1 删除, 例如:银行卡,id可以删除,但是会影响数据的性能问题,数据不好维护
“”"
my_list5 = [‘魔术士’,‘assassin’,‘rider’,‘450’,233,3.12]
print(my_list5[0])
print(my_list5[2])
#print(my_list5[7]) #list超出内存空间,报异常IndexError: list index out of range
print(my_list5[-1]) #-1表示按照倒序获取值
#print(my_list5[-7]) #list超出内存空间,报异常IndexError: list index out of range

“”"
列表list
1:len属性函数 len方法 ?
备注:如何区别属性和方法?
len(0) 0表示的是list里存放的对象
“”"
print(‘my_list5的长度为:’,len(my_list5))
#print(‘my_list5的长度为:’,len(0))
“”"
列表切片
1:什么是切片?例如:一个西瓜 可以切成很多“块” ——“块”指的就是数据块
list的切片就是通过index将一个完整的字符串或者list进行划分不同的值

“”"
stus = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
print(‘切片以后的值为:’,stus[1]) #并不是切片
print(‘切片以后的值为:’,stus[1:1]) #内存空间,切片必须保证数据的完整性
print(‘切片以后的值为:’,stus[1:2])
print(‘切片以后的值为:’,stus[1:3])
print(‘切片以后的值为:’,stus[1:4])
print(‘切片以后的值为:’,stus[1:6])
print(‘切片以后的值为:’,stus[1:9]) #在数据切片过程当中,如果切片的次数大于list里的数据,程序不会报错,因为有足够的内存
print(‘切片以后的值为:’,stus[0:9])
print(‘切片以后的值为:’,stus[-1:9])
#备注:在列表切片操作过程中,[1:1]会将数据进行破坏,违背数据的:原理性、离子性

如果省略结束位置,则会一直截取到最后

如果省略起始位置,则会从第一个元素开始截取

print(‘省略切片结束以后的值为:’,stus[1:])
print(‘省略切片开始以后的值为:’,stus[:5])
print(‘省略切片开始以后的值为:’,stus[:9])
#总结 list 列表的核心特性:只包含开始索引位置,不包含结束索引位置
#如果起始位置和结束位置全部省略,则相当于创建了一个列表的副本
print(‘起始位置和结束位置全部省略的值:’,stus[:]) #此操作在工作中尽量不要出现
“”"
备注: 因为 表示的是一个内存,如果没有起始位置和结束位置的定义,这个内存默认就是无限大
这样会导致大量的内存空间闲置,最后会导致程序、数据的空闲例程。
思考?什么是线程安全和线程不安全? ——重点面试题目
线程安全:多个线程在操作过程当中,一个线程在执行的时候,另一个线程不能执行,采用了加锁机制,
来保证数据的安全性,直到线程1结束释放CPU资源,线程2才可以执行。
线程不安全:多个线程在执行的过程当中,大家都在抢=抢夺CPU资源,最终导致服务器崩溃,数据泄露,线程发生死锁问题。
什么是死锁?死锁如何解决? ————课下自己研究(重点内容)
4:列表list
语法:列表[起始:结束:步长]
步长表示,每次获取元素的间隔,默认值是1
print(stus[0:5:3])
步长不能是0,但是可以是负数

“”"
stus = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
#print(‘步长操作:’,stus[::0]) #ValueError: slice step cannot be zero
print(‘步长操作1:’,stus[1:2:1]) #表示步长为1
print(‘步长操作2:’,stus[1:3:1]) #表示步长为1
print(‘步长操作3:’,stus[1:4:1]) #表示步长为1
print(‘步长操作4:’,stus[1:4:-1]) #表示步长为-1 备注:步长的负数不建议使用
“”"
1:步长表示的是一个间隔,用于间隔数据,如果步长为负,对于数据来讲,进行数据的读写操作很慢,
因为不确定数据的开始值和结束值,即没有最大值和最小值。数据不好维护,并且会产生数据的垃圾碎片
——最终导致数据的脏读(脏数据)。
例如:1 2 3 4 5 6 7 8 9 10

“”"
my_list6 = [‘saber’,‘archer’,‘lancer’]+[‘caster’,‘assassin’,‘rider’]
print(‘list拼接之和的值:’,type(my_list6))
print(‘list拼接之和的值:’,my_list6)
#list的拼接原理

my_list7 = [‘saber’,‘archer’,‘lancer’]2
print('list
之后的结果:’,type(my_list7))
print('list之后的结果:’,my_list7)
#备注:在list里面通过
(其实就是在进行数据的复制操作),但在内存中相同的数据不可能替换或者覆盖,

程序还是会重新分批内存空间,在工作当中不建议使用。 ——数据的批处理Bath

“”"
2:列表的 + *
<1:数据是以左边的数据列表为主列表,右边的为子列表。
<2:列表拼接之和就是一个完整的list,将值默认存放到堆内存里面。
❤️:列表遵守数据的先进后出,后进先出的原理。
<4:判断列表中的元素是否存在
“”"
#in在列表里面表示判断列表元素的存在性,如果存在返回True,不存在返回False
stus = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
print(‘孙悟空’ in stus)
print(‘猴子’ in stus)
print(‘猪八戒’ not in stus)
print(‘天蓬’ not in stus)
#备注:(1)in 和 not in ——经常使用 就是对数据的筛选操作,只要之后提到数据的筛选操作,几乎都是安全的,建议使用。
# (2)in 、 not in 和数据库的 in 、 not in 一样。
# (3)where和having的区别?
# 浅谈where:表示一个条件判断,会在数据操作过程中降低数据库的性能问题。
# 浅谈having:表示的是数据的筛选操作,和Python的list列表很相似,建议使用having。

stus = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
print(‘max最大值:’,max(stus))
print(‘min最小值:’,min(stus))
#字符串在函数max min sum avg 等具有计算函数对的操作里面,不能继续函数丶功能实现,不能参与运算。

所以字符串不可以被随意更改,并且字符串有len长度。

stus2 = [11,22,33,44,55,66,77,88]
print(‘max and min最大/小值:’,max(stus2),min(stus2))
#总结:最大的幕后黑手boss就是Python解释器 自动判断是什么type类型
print(stus2.index(11))
#index表示通过具体的值获取到list的下标位置

说明:传统的大数据可以利用Excel表格,现在不行,现在利用互联网技术Hadoop、spark、hive、HBASE

print(stus2.index(1)) #没有找到list中的元素,抛异常 ValueError: 1 is not in list

stus2 = [11,22,33,44,55,66,77,88,99,88,77]
print(‘count统计list中元素出现的个数:’,stus2.count(77))
“”"
1:count表示统计,并非计算函数
2:统计的原理 数据出现的‘次数’,不是‘多少条数据’
3:Java中学过count?
select count(*) from emp;
假设:DB有 100 data DB有 10000 data
传统的网站:访问量利用count
现在的JD、阿里、
“”"

“”"
list列表元素
1:修改元素
“”"
stus3 = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
print(‘修改之前的列表元素值为:’,stus3)
#通过index下标修改元素的值
stus3[0] = ‘sunwukong’
print(‘修改之后的list元素值为:’,stus3)
#重点强调 index的修改用法
1:通过index索引修改的数据只是在控制台给客户打印输出,不能将原始数据库进行修改。
2:通过index修改元素并不影响元素的性能、数据完整性、也不会造成数据的脏读、脏写操作。
3:企业开发获取参数的值、获取数据库表字段建议使用index,操作安全、快捷、方便。
总结:——重点 思考提问?在数据库操作数据的时候,什么时候可以利用索引?什么时候可以不利用索引操作数据?
#备注:如果一行数据经常被修改、访问、更新操作,不能使用索引操作此数据
    # 后果:(1)内存溢出;(2)会造成数据的缺失——数据的完整性;(3)给内存里造成负载均衡。
    # tomcat + nigx集群 + Hadoop(分析大数据) + slor(全文检索) + Redis (缓存数据库)——非“关系”型数据库
s

“”"
list列表元素
1:修改元素
“”"
stus3 = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘蜘蛛精’,‘白骨精’]
print(‘修改之前的列表元素值为:’,stus3)
#通过index下标修改元素的值
stus3[0] = ‘sunwukong’
print(‘修改之后的list元素值为:’,stus3)
#重点强调 index的修改用法

tus4 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
print(‘通过del删除list列表的元素之前值:’,stus4)
del stus4[2]
print(‘通过del删除list列表的元素之后值:’,stus4)

通过index的下标删除数据 .注意:利用del删除元素,只会删除元素内存里面的内容,并不会将数据库内存的地址彻底删除el 来说,它是根据索引(元素所在位置)来删除的.remove 是删除首个符合条件的元素。并不是删除特定的索引。pop返回的是你弹出的那个数值。

stus5 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
print(‘通过append给列表添加新元素——添加之前:’,stus5)
stus5.append(‘蛋哥’)
print(‘通过append给列表添加新元素——添加之后:’,stus5)

stus6 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
stus6.insert(3,‘宋少爷’)
print(‘insert的之后的值:’,stus6)

stus.extend([‘唐僧’,‘白骨精’])

stus += [‘唐僧’,‘白骨精’]

stus7 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
stus7.extend([‘唐僧’,‘白骨精’]) #将list列表以参数的身份传递给extend
print(stus7)
stus7 = stus7 + [‘唐僧’,‘白骨精’] #拼接
print(stus7)
“”"
1:extend这个关键字是动态参数的形式去获取列表元素————动态直接操作数据
2:拼接列表是通过 + 表示静态操作————静态不操作数据
“”"

stus8 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
stus8.clear()
print(‘通过clear方法清除元素之后的结果:’,stus8)

stus9 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
result = stus9.pop(2)
print(‘通过pop删除之后的元素:’,result)

pop原理 (类似于:主库————保持数据的同步就OK ——从库) 通过地址直接给客户

stus10 = [‘孙悟空’, ‘猪八戒’, ‘沙和尚’, ‘唐僧’, ‘蜘蛛精’, ‘白骨精’]
stus10.reverse()
print(‘通过reverse反转之后的值:’,stus10)

用来对列表中的元素进行排序,默认是升序排列

如果需要降序排列,则需要传递一个reverse=True作为参数

stus11 = [10,1,20,3,4,5,0,-2]
#stus11.sort(reveres=True)
print(‘sort修改前:’,stus11)
stus11.sort()

reversed = True

print(‘sort修改前:’,stus11)
“”"
列表list:其实就是一个存放数据的集合 ——数据肯定需要循环遍历结果 ——输出给客户端
提问?遍历数据的结果集有哪几种方法?
1:for循环——加强for循环
for(参数1:参数2)
public static void main(String args[]){}
2:迭代器
3:for——each
备注:list里的元素利用[]定义 ——遍历结果集也可以利用… (表示无穷大)
Python里利用’:’ 后面跟可执行的代码体

“”"

stus12 = [‘孙悟空’,‘猪八戒’,‘沙和尚’,‘唐僧’,‘白骨精’,‘蜘蛛精’]
print(‘遍历stus12结果集:’,stus12[0])
print(‘遍历stus12结果集:’,stus12[2])
print(‘遍历stus12结果集:’,stus12[4])
#以上遍历结果等价于 Java的get()、set()、new对象 ——效率不高,企业不会用这种方式

Python语言通过’:’ 写代码的执行部分, ':‘和Java的’{}'等价

while(变量名称,变量类型){

循环体

}

j = 0
while j < len(stus11):
print(stus11[j])
j = j+1
for k in stus11:
print(k)
#备注:通过以上操作发现,Python语言叫胶水语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值