python中神奇的集合

从上节学习过字符串后,心中就在思考,想要存储多个字符串怎么办?C中有数组可以实现上述功能,那python呢?现在就让我们来一探究竟吧。python中提供了一种神奇的数据类型list,他有多神奇呢,大家先不要急,让我婉婉到来,茶要慢慢品嘛。

list是一种有序的集合,可以随时对他进行增减等操作。比如需要列出小组里所有组员的名字:

>>>group = [ 'Liming' , 'Wanghai' , 'Zhangfang' ];
>>>print( group );
[ 'Liming' , 'Wanghai' , 'Zhangfang' ]

看到中括号'[]'是不是感觉很像数组?别急,python中还给我们提供了元组'()'和字典'{}',这些都会在后面一一描述。

那么,既然list很像数组,他的索引又是从哪里开始的呢?上述group中又有几个元素呢?

>>>len( group );
3
>>>group[0];
'Liming'
>>>group[0];
'Zhangfang'

可以看出,list的索引是0到len( group )-1。下面就是python中名为切片的有意思的地方了,如果你用过matlab的话,你可能会说,“哎呀,这不就是matlab数组的用法嘛”;如果没有的话,你可能会说,“还有这么神奇的用法”。那么就让我们一起来看一看吧。

>>>group[-1];
'Zhangfang'
>>>group[-3];
'Liming'
>>>group[:];
[ 'Liming' , 'Wanghai' , 'Zhangfang' ]
>>>group[::];
[ 'Liming' , 'Wanghai' , 'Zhangfang' ]
>>>group[::-1];
[ 'Zhangfang', 'Wanghai' , 'Liming' ]

list支持倒序查找元素,如-1找到的就是最后一个元素,而-len( group )-1就是第一个元素了。对于省略参数的类型,例如group[::]等效于group[0:len(group)+1:1](第二个冒号省略默认步长为1),而group[::-1]代表的就是group[-1:-len(group)-1:-1];其中第二个':'后面的±1代表了步长。也许细心的你会问为什么第一个‘:’后面的±len(group)都要±1呢?

这是因为对于python来讲[ x : y ]相当于只有y-x个元素,例:

>>>group[0:2];
[ 'Liming' , 'Wanghai'  ]
>>>group[-1:-3:-1];
[ 'Zhangfang', 'Wanghai' ]

注意:当省略步长时,步长默认为1。

而对于字符串类型,同样支持切片操作,不过是返回的是某些字符而已了,如下所示:

# -*- coding: utf-8 -*-
name = 'Mecial';
print(name[0])
print(name[-1:-3:-1])

list集合的增删改查

>>>group.insert( 1 , 'Chensen' );
>>>group
[ 'Liming' , 'Chensen' , 'Wanghai' , 'Zhangfang' ]
>>>group.pop( 0 );
'Liming'
>>>group
[ 'Chensen' , 'Wanghai' , 'Zhangfang' ]
>>>group[0] = 'Liming' ;
>>>group
[ 'Liming' , 'Wanghai' , 'Zhangfang' ]

从上面可以看出insert()方法可以在指定索引位置插入元素,pop()方法可以删除指定索引位置的元素,还可以通过直接赋值的方法对指定索引位置的元素进行更改。怎么样,是不是很像matlab呢?

那么,既然python是一个动态语言,是否也就意味着list中的元素可以是不同类型的数据呢,让我们来实验一下:

>>>group[2] = 20180323;
>>>group
[ 'Liming' , 'Wanghai' , 20180323 ]

看,完美的赋值。C等语言中有二维数组,python的list是否也有类似的结构呢?

>>>team = [ 'Zhangfang' , 'Chensen' ];
>>>group[2] = team ;
>>>group
['Liming','Wanghai',['Zhangfang' ,'Chensen']]
>>>len(group)
3
>>>group[2][1]
'Chensen'

可以看到,group中放置了team,从而构成了"二维数组",但group的长度仍然是3。

元组tuple()

有一种有序的数组叫做tuple,他跟list极其相似,但是有需要注意的是元组()一旦被初始化后就不能再改变!!!其他的读取都跟list[]相同。有一点需要注意的是,当定义只有一个元素的元组时会发生以下的情况

>>>test_tuple = (1);
>>>test_tuple
1
>>>test_tuple = (1,);
>>>test_tuple
(1,)

对于python来讲,()默认为是数学上的括号,而不是tuple中的(),因此需要对其加一个逗号','同样的,tuple也会输出一个','以免造成误解。

字典dict{}

dict全称dictionary,由于使用键值(key-value)存储,因而有着极快的查找速度。当需要存储一个人的名字和年龄时,如果用列表就需要两个list分别存储名字和年龄;这样当需要查找某一个人的年龄时就需要先通过一个list查找其名字所在的索引,然后根据索引值再去查找存放在另一个list中的年龄,当数据量比较大的时候,复杂度可想而知。因此,通过键值(key-value)存储的dict就有着巨大的优越性,下面让我们一起来看一看dict的存储。

name_age = { 'Liming' : 18 , 'Wanghai' : 22 , 'Zhangfang' : 36 }
name_age['Liming']
print( name_age['Liming'] )
for n in name_age:
	print(name_age[n])
	print(n)

输出为:

18
18
Liming
22
Wanghai
36
Zhangfang
可以看出对于name_age,传入的是key而不是索引位置,否则会报错!!!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值