这一波我们学习的是python中比较关键的两个数据结构 列表和字典
列表俗称打了激素的数组 因为它不仅有数组的全部功能 而且每个索引的数值类型可以不同
不像数组 只能存同类型的数据 列表可以存各种各样的数据类型
并且相对于不可变得元组 列表是可变的有序数据结构
列表的索引 完全和字符串是相同的 正向 逆向 切片 都是相同的操作
重复和连接 也是有和字符串相同的方法
那么下来就是增删查改
首先 增
增加有两种常用的方法
append方法和insert方法
append方法是将括号中的参数 追加到列表的最后
insert方法有两个参数 index和value 将value插入到对应的index位置
还有一个方法叫extend拉伸 这个可以把括号中的多个参数 追加到列表后面
然后 改
改的话很简单 就是列表对应索引的再赋值
查
查的话 有count方法 统计一个参数在列表中出现的次数
index方法 查询参数在列表中对应的索引值
删
删的话 指定value删的方法是remove
直接删的话 del+ 列表[索引]
也可以使用切片 来实现各种类型的删除
整个删除列表的话就是del + 列表
然后排序的话 是使用sort方法 但是不建议在各种类型的值都有的列表中使用 因为排序在不同数值类型之间是没有意义的
逆转还是使用切片的方式[::-1]
2. 字典
字典是比较特殊的一个数据结构 主要就是建立一个key和value的映射关系 就像c的链表一样 每个value对应一个它后继的指针 然后这一对数据被存在一个地址空间里
字典也是一样 把一个键 值 的对 一对一对的存储起来
字典的话还要说说创建
可以使用key:value直接创建 如下
d = {"key1":"value1", "key2":"value2"}
也可以通过工厂函数创建
userinfo = dict(user1="123", user2="456", user3 ="789")
还可以通过fromkeys方法创建
print {}.fromkeys("hello") 没有指定value值时 默认为none
print {}.fromkeys(["user1", "user2", "user3"], "123")
这样的话 默认值就是123
同时 字典具有以下的特性:
字典不能索引和切片,因为字典是无序的数据类型;
字典不支持重复和连接;
字典支持成员操作符: 判断字典的key值是否在字典中存在; in, not in
那么下来说字典的增删查改
增
可以通过[key]=value直接添加
services['http'] = [80, 8080]
但是更推荐使用update方法添加
但是update有个特点就是如果字典中已存在要添加的key值的话 那么原先的对 就会被新加的对覆盖
而setdefault方法 的话 不会覆盖原先的键值对 但是如果key存在的话 是添加不进去的
所以从这里 可以看出来 key对于字典来说 相当于数据库表中的primary key 主键一样 是唯一标识的 不能重复
改
字典名[key]=value
d.update({'a':2, 'b':3})
d.update(a=2, b=3)
这三种方法都是可以的 感觉还是和增是同样的操作
查
查看 key 值的话
services.keys()
services.viewkeys()
services.iterkeys()这三个方法是可以的
查看value值使用 values方法
查看键值对 的话 用items方法
查看key是否存在 使用has_key方法
删
d.pop(key) 删除指定 key 的字典元素
d.popitem() 随机删除字典的 key-value 元素
del d[key] 删除指定 key 的字典元素
d.clear() 清空字典元素
要循环遍历字典的话 使用一个二重循环
for i,j in services.items():
print i,j
而且 字典还有一个很有意思的用法
用来实现switch——case语句
因为python是不支持switch——case的
但是字典刚好是key value的键值对 并且值可以是一个表达式 那么刚好可以利用这个结构来构建switch——case
num1 = input()
ope = raw_input()
num2 = input()
d = {
"+" : num1+num2,
"-" : num1-num2,
"*" : num1*num2,
"/" : num1/num2,
}
if not ope in d:
print "error operator"
else:
print d[ope]
那么笔记整理到此结束 下面是练习
输入一串字符 判断其中最后一个单词的长度 单词以空格隔开
输入一串字符和一个字母 以空格隔开 判断字母在前面的字符中出现过多少次
将转义过后的密码翻译成正确的密码 密码对应规则是 大写字母小写并后移一位 小写字母对应成手机九宫格键盘的数字 数字不变
腾讯编程
输入一个1~2000的数字 判断共有多少对素数相加的和等于这个数
这个不好测试手算太麻烦 我大概算了一下前20 是满足的 后面数字太大不好算了 应该是对的吧