python数据结构详细解析

python有四种内置的数据结构,分别为
列表(List)
元组(Tuple)
字典(Dictionary)
集合(Set)

以下分别对这四种结构进行介绍和举例:
1.列表:列表就像日常中的事物清单,清单上列出我们要做的事情,同时我们可以修改清单的内容,或增加,或减少,也就是说列表是可以变化的。列表的内容使用方括号[],比如定义了一个购物清单
shopping_list = ['fish','rice','apple','bear']
我们可以利用 列表推导来快速生产列表。所谓推导,就是根据已有的数据,对其进行遍历获取之后生成到新的数据机构中。
比如已知一个字符串,我们可以利用列表推导生成该字符串对应的大写的字符列表
str = 'abc'
upper_str = [ char.upper() for char in str]
for char in upper_str:
print(char)

结果
A
B
C
此外,我们可以用 生成器表达式生成list,语法和列表推导差不多,只不过把方括号【】换成圆括号(),比如
>>> upper_str=list(char.upper() for char in str)
>>> upper_str
['A', 'B', 'C']
2.元组:用于保存多个对象,是不能修改的,不能像列表一样进行添加等动作。元组一般用括号()进行内容的封装,也可不用,但是一般推荐用括号。 比如 定义
fruit = ('apple','banana')
new_fruit = ('grape',fruit)
我们可以用生成器表达式快速生成元组,比如

>>> str = 'abc'
>>> tuple_str = tuple(s for s in str)
>>> tuple_str
('a', 'b', 'c')

我们可以将元组合列表进行结合,比如定义一组学生的信息
# coding=utf-8
student_info = [('class1','张三'),('class2','李四'),('class2','王五')];
for student in student_info:
print('班级:%s,姓名:%s'%student);
结果:
班级:class1,姓名:张三
班级:class2,姓名:李四
班级:class2,姓名:王五
如果我们要忽略掉其中的一个数据,可以用占位符_ 进行替换,比如上面的例子中,我们只要提取学生姓名,那么可以这样操作
for _,name in student_info:
print('姓名:%s'%name);

结果是这样:
姓名:张三
姓名:李四
姓名:王五
我们用for循环遍历的过程也叫 拆包,拆包的过程中可以进行 嵌套,比如我们定义几个地址,包括地名,人口,经纬度,

area_info = [('area1',44,(23,134)),('area2',899,(56,90)),('area3',245.4,(-12,-34))]
print('{:8} | {:^12} | {:^12} | {:^12}'.format('城市','人口','经度','纬度'))
fmt = '{:5} | {:9.4f} | {:9.4f} |{:9.4f}'
for city,population,(latitude,longtitude) in area_info:
if population>=100:
print(fmt.format(city,population,latitude,longtitude))

结果:
城市 | 人口 | 经度 | 纬度
area2 | 899.0000 | 56.0000 | 90.0000
area3 | 245.4000 | -12.0000 | -34.0000

3.字典:就是一个key对应一个value,这个对应关系必须是唯一的。用法是将大括号{}将他们包起来,key和value用冒号:进行关联,用逗号,将多个键值进行分割,比如 dict = {key1:value1,key2:value2},help(dict)查看字典的更多信息
以下是一个通讯录的例子
phonebook ={
'jack':'13511111111',
'jone':'13855555555',
'jay':'150777777777'
}

print('jack phone number',phonebook['jack'])
#遍历
for name,phone in phonebook.items():
print(name,phone)

#删除
del phonebook['jay']

#增加
phonebook['linda'] = '18011119999'

#判断
if 'linda' in phonebook:
print('linda phone number is',phonebook['linda'])
我们可以利用 字典推导来快速初始化字典。字典推导可以从以键值对为元素的可迭代对象中构建字典。我们从一个装有学生分数的列表中构建一个字典
>>> student_score = [('linda',67),('richar',89),('jack',70)]
>>> score_name= { score:name for name ,score in student_score}
>>> score_name
{89: 'richar', 67: 'linda', 70: 'jack'}
其中 for name,score in student_score 相当于从列表中找出所有的键值对,至于 score:name 这一步是用来构建字典,当然我们也可以将字典的键值反过来,比如在上面已经构建好的字典的上,我们找出高于70分的同学
>>> name_score = {name:score for score,name in score_name.items()
... if score>70}
>>> name_score
{'richar': 89}

4.集合:就是对象的无序集合,当我们不关注对象的存在顺序,只关心是否存在时就用集合。和java中的set一样,集合可以用于去重。
>>> list = ['spark','hadoop','java','spark','storm']
>>> set(list)
set(['spark', 'java', 'hadoop', 'storm'])
同样,我们也可以用 集合推导来快速生成集合
>>> str='abcaabcd'
>>> s={char for char in str}
>>> s
set(['a', 'c', 'b', 'd'])
我们可以对集合进行很多操作,详细方法可以用 help(set)查看

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值