Python 列表-元组-字典
创始人
2024-05-23 23:44:47
0

文章目录

    • 列表和元组
      • 列表
        • 切片
        • 遍历
        • 列表新增元素
        • 查找和删除
      • 元组
    • 字典
        • 增删
        • 遍历
        • 合法key类型-可哈希hash()

列表和元组

用一个变量来表示多个数据,类似于其他语言的数组.

  • 大部分相等,区别是

​ 列表是可变的:创建好之后随时能改,(散装的)

​ 元组是不可变的:改不了(包装好的),只能换一个新的

列表

#创建列表
a=[]
print(type(a))
a=list()
print(type(a))#设定初始值,用,分割
b=[1,2,3,4]
print(b)#可以放不同类型的数据
c=[1,'hello',True,[4,5,6]]
print(c)#通过下标访问的方式,获取列表中的元素,从0开始数,到长度-1
print(b[1])
print(c[3])
print(c[3][2])#获取列表长度len
l=len(b)
print(l)#下标为负数,就是反向获取,-1就相当于len(b)-1
print(b[-1])#还可以通过下标修改值
b[1]=666
print(b)

切片

只是取出原有列表中的一部分,并不涉及到数据的拷贝,即使列表很大,切片的效率都很高效/

#切片
a=[1,2,3,4]
print(a[1:3])#切片操作,[1,3),下标左闭右开的范围#可以省略边界
print(a[1:])
print(a[:2])
print(a[:])
#下标为负数也可
print(a[:-1])
#指定步长
a=[1,2,3,4,54,65,7,87,9]
print(a[::2])
print(a[1:-1:2])
#步长为负数,就是从后往前打印
print(a[-1:1:-1])
print(a[::-1])
#不是有效范围下标的时候不会出现异常,而是尽可能把符合要求的元素拿到
print(a[1:100])

遍历

a=[1,2,3,4,5,6]
#in 后面是可迭代对象就行#将列表中的每个元素对elem 赋值,不会对原列表造成影响
for elem in a:# print(elem)elem+=1
print(a)    #[1, 2, 3, 4, 5, 6]
print(elem) #7#下标的方式遍历取到了列表元素,可以修改
for elem in range(0,len(a)):a[elem]+=10
print(a)    #[11, 12, 13, 14, 15, 16]i=0
while i

列表新增元素

# append 搭配列表对象a来一起使用,也叫作方法
# 不是独立的函数(type,print,input,len)
a = [1, 2, 3, 4, 5]
a.append('hello')
print(a)    #[1, 2, 3, 4, 5, 'hello']#insert()任意位置插入
b=[1,2,3,4,56,6]
b.insert(1,'hello')
print(b)    #[1, 'hello', 2, 3, 4, 56, 6]
b.insert(100,'xiaoawei')
print(b)    #[1, 'hello', 2, 3, 4, 56, 6, 'xiaoawei']

查找和删除

# +拼接两个列表,生成一个新的列表
a=[1,2,3,4,5,6]
b=[7,8,9,0]
print(a+b)  #[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]#extend进行拼接,把后一个列表直接拼接到前一个的列表
a.extend(b)
print(a)    #[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(b)    #[7, 8, 9, 0]
#extend没有返回值,那一个变量None接收返回值
c=a.extend(b)
print(c)    #None#+=实现
a+=b    #a=a+b,先产生一个新的列表,再有一个重新赋值的操作,然后把旧值释放
print(a)    #[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(b)    #[7, 8, 9, 0]

元组

# 创建元组
a=()
b=tuple()a=(1,2,3,4,5)
b=(1,2,3,"hello",[1,2,3])#下标访问
print(a[1])
print(a[-1])
# print(a[100])   #IndexError: tuple index out of range#切片
print(a[1:3])for elem in a:print(elem)print(3 in a)
print(a.index(3))print(a+b)#修改不可取TypeError: 'tuple' object does not support item assignment
# for i in range(0,len(a)):
#     a[i]+=1
# print(a)
# a[0]=100
# a.append(5)
# a.pop()
# a.insert(1,5)
# a.extend(b)#当进行多元赋值的时候,本质就是按照元组的方式进行工作的
def getPoint():x=10y=20return x,y#构建一个元组,然后赋值
x,y=getPoint()
print(type(getPoint())) #
  • B调用A实现的函数接口,传参的时候避免A函数将我的参数内容进行修改,所以使用元组的方式作为参数,避免这样的纠结.

  • 元组是不能修改的->不可变对象是可以哈希的

字典

键值对Key-Value,映射关系.字典中可以同时包含很多的键值对,同时要求这些键不能够重复.

对于字典来说,使用in或者[]来获取value都是比较高效的,本质是字典的背后使用了哈希表.

对于列表来说in就比较低效,使用[]比较高效,类似顺序表取下标.

#创建字典
a={}
b=dict()
#key类型有约束,value类型随便
#最后键值对的,可写可不写
a={'id':1,'name':'张三',100:'xiabio'
}
print(a)#查找# in or not in (只是判定key的存在)
print('id' in a)
print('classid' not in a)#[]直接获取value
print(a['id'])
print(a[100])
# print(a['classid']) #KeyError: 'classid'读操作,没有怎么读到显示器

增删

#使用[]进行新增
a={'id':1,'name':'张三'
}
#不存在,往里面写入
a['score']=90
print(a)
#已存在的值,叫修改
a['score']=100
print(a)#删除,,根据key
a.pop('name')
print(a)

遍历

遍历值的就是把一个可迭代对象,元素依次取出来,并进行操作.字典被设计出来的初衷是为了增删改查,不是为了实现遍历.哈希表能够以常数级时间复杂度,完成增删改查.无论字典中有多少个元素,增删改查都是固定时间,不会因为元素多了就变慢了.字典中的key值是不能重复的.

C++中的键值对存储的是无序的,但是python中的字典做过特殊处理,保证存储顺序是按照插入顺序的.

a={'id':1,'name':'张三','score':90
}
for key in a:print(key,a[key])
# keys values items
print(a.keys()) #dict_keys(['id', 'name', 'score'])
print(a.values())
print(a.items())   #dict_items([('id', 1), ('name', '张三'), ('score', 90)])for key,value in a.items():print(key,value)

合法key类型-可哈希hash()

hash()计算变量哈希值,不可变的对象基本都可哈希

print(hash('xiaoawei')) #字符串
print(hash((1,2,3)))    #元组
print(hash(True))
print(hash(1))print(hash([1,2,3]))    #TypeError: unhashable type: 'list'
print(hash({ }))    #TypeError: unhashable type: 'dict'

相关内容

热门资讯

金融监管总局副局长丛林:已通过... 5月8日,金融监管总局副局长丛林在国新办新闻发布会上表示,金融监管总局协同创建信息对接共享机制。在线...
蔡姓股民向*ST沐邦发起索赔 ...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
捷克央行下调基准利率至3.5% 中新网北京5月8日电 布拉格消息:捷克国家银行(央行)7日将基准利率下调25个基点至3.5%。捷克央...
宁波建工涨2.01%,成交额1... 5月8日,宁波建工盘中上涨2.01%,截至11:18,报5.57元/股,成交1.39亿元,换手率2....
天齐锂业涨2.00%,成交额3... 5月8日,天齐锂业盘中上涨2.00%,截至11:13,报29.56元/股,成交3.04亿元,换手率0...
菲艇企图侵闯我黄岩岛领海,南部... 据微信公众号“南部战区”消息,南部战区新闻发言人田军里空军大校表示,5月5日,菲35号护卫艇企图侵闯...
连平:适度宽松货币政策进一步发... 建议进一步调降政策利率0.2~0.3个百分点,设立5000亿元稳外贸专项再贷款。 5月7日,中国人民...
金智科技涨2.41%,成交额7... 5月8日,金智科技盘中上涨2.41%,截至11:23,报9.34元/股,成交7161.89万元,换手...
央行购金需求继续提供支撑 沪金... 来源:申银万国期货 作者:申银万国期货研报正文宏观消息 美联储如期按兵不动,维持联邦基金利率...
Abraxas Capital... 吴说获悉,据 @ai_9684xtpa 监测,Abraxas Capital 四小时前在 ETH 反...
菲35号护卫艇企图侵闯中国黄岩... 南部战区新闻发言人田军里空军大校表示,5月5日,菲35号护卫艇企图侵闯中国黄岩岛领海,中国人民解放军...
“拒绝”特朗普?美联储连续第三... 中新网5月8日电(宫宏宇)美东时间5月7日,美联储宣布,联邦基金利率目标区间保持4.25%至4.5%...
甘肃省平凉市泾川县汭丰镇市场监... 中国质量新闻网讯 农村假冒伪劣食品专项整治行动部署开展以来,甘肃省平凉市泾川县汭丰镇市场监督管理所高...
商络电子涨2.26%,成交额9... 5月8日,商络电子盘中上涨2.26%,截至11:08,报11.30元/股,成交9073.43万元,换...
贝仕达克涨2.13%,成交额9... 5月8日,贝仕达克盘中上涨2.13%,截至11:07,报21.58元/股,成交9205.62万元,换...
徐姓股民向*ST中程发起索赔 ...   受损股民可至Hehson股民维权平台登记该公司维权:http://wq.finance.sina...
甘肃省玉门市启动食品安全专项监... 中国质量新闻网讯 为持续强化食品安全风险防控,充分发挥监督抽检在行政执法中的技术支撑作用,近日,甘肃...
新闻发布会 | 聚焦“两持续”... 转自:陕西发布5月7日,省政府新闻办举行新闻发布会,解读省委、省政府《关于进一步深化农村改革扎实推进...
山东省在产钢铁企业全面完成全过... 按照《山东省中央生态环境保护督察整改任务验收销号工作规定》(鲁环督改办〔2022〕8号)相关规定,拟...
南部战区刚刚发声! 南部战区新闻发言人发表谈话南部战区新闻发言人田军里空军大校表示,5月5日,菲35号护卫艇企图侵闯中国...