python基础学习总结day03
列表,元组,字典,集合
列表和元组:
相同点:
- 都可以通过下标访问
- 都可以通过做切片
不同点:
- 列表是的元素是可以改变的,元组的元素一旦初始化就不能改变。
元组和字典:
相同点:
- 元组和字典的key均是不能修改的。
不同点:
- 字典的key能够新增,而元组一旦初始化完毕不能删除,不能新增,只能删除整个元组。
列表和字典:
- 列表是查找和插入时间随着元素的增加而增加,字典查找和插入的速度极快,不会随着key的增加而变慢。通过key计算位置的算法称为哈希算法(Hash)。
- 列表占用的空间小,浪费的内存很少。字典需要占用大量内存,内存浪费多。
- 列表的元素是可以改变的,而字典的key是不可变对象。要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
集合和字典:
- 集合是无序的唯一的,和字典的key是相同的。都是不可变对象,所有字典的key和集合元素不能为list因为list为可变元素。
1.dict字典
a.定义
python中的字典dict相当于是java中的map,是key-value形式的键值对。标志是{key:value,key:value},字典是无序的。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
b.创建
# 1.直接创建
dict1 = {'name': 'lisi', 'age': 9, 'address': 'china'}
print(dict1['name'])
>>>lisi
# 2.通过关键字dict和关键字参数创建
dict2 = dict(name='lisi', age=9, address='china')
print(dict2)
>>>{'age': 9, 'name': 'lisi', 'address': 'china'}
# 3.通过zip(拉链函数)创建
dict3 = dict(zip('abc', (1, 2, 3)))
print(dict3)
>>>{'a': 1, 'c': 3, 'b': 2}
# 4.通过二元组列表创建
list = [('name', 'zhangsan'), ('age', 9), ('address', 'china')]
dict4 = dict(list)
print(dict4)
>>>{'age': 9, 'name': 'zhangsan', 'address': 'china'}
# 5.通过字典推导式创建
dict5 = {i: 2 * i for i in range(3)}
print(dict5)
>>>{0: 0, 1: 2, 2: 4}
#6.通过dict.fromkeys()创建
#通常用来初始化字典, 设置value的默认值
dict6 = dict.fromkeys(range(3), 'x')
print(dict6)
>>>{0: 'x', 1: 'x', 2: 'x'}
C.字典的遍历
dict.keys()返回的是key的集合,
dict.values()返回的是values的集合,
dict.items()返回的(key,value)tuple二元组
d1={'name':"zhangsan",'age':20,'gender':"man"}
for key in d1.keys():
print(key)
for value in d1.values():
print(value)
for item in d1.items():
print(item)
c.字典的方法
1.取值
- dict[key],注意key必须是存在的,不存在时会报错
# -*- coding: utf-8 -*-
dict1 = ['name': 'lisi', 'age': 9, 'address': 'china']
dict1['age']
>>>lisi
#如果没有key时会报错
dict['height']
>>> dict['height']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'height'
- dict.get(key),如果key不存在时候返回None
dict.get(key,default)获取key对应的value,若value不存在则返回default
>>> age = info.get('age')
>>> age #'age'键不存在,所以age为None
>>> type(age)
<type 'NoneType'>
>>> age = info.get('age', 18) # 若info中不存在'age'这个键,就返回默认值18
>>> age
2.修改
因为字典是无序的所以修改的时候只能指定key进行修改
dict1 = {'name':'zhangsan'}
dict1['name'] = 'lisi'
3.添加
添加key
dict1['id'] = '110'
Python 字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里。update相同的key会覆盖,不同的话添加。
#!/usr/bin/python
dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }
dict.update(dict2)
>>>{'Age': 7, 'Name': 'Zara', 'Sex': 'female'}}
4.删除
对字典进行删除操作,有一下几种:
- del
- clear()
- pop(key):必须指定一个key值进行删除。
- popitem():随机删除一个key:value对
del info['name']:只删除一个key
del info:删除整个字典
info.clear():返回{}
5.常用
- len():测量字典中,键值对的个数 len(dict)
- keys():返回一个包含字典所有KEY的列表dict.keys()
- values():返回一个包含字典所有value的列表。dict.values()
- 返回一个包含所有(键,值)元组的列表。dict.items()
- has_key():dict.has_key(key)如果key在字典中,返回True,否则返回False
- setdefault(key,default),获取字典的key的value,若key值没有则使用defalut值。
- 判断key是否存在
方法一:通过 in/not in 来判断键是否在字典中;
方法二:通过_contains_(key)来判断字典中是否存在该键值。
2.集合
a.特性
set:无序,唯一。(和java中的set定义相同)
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
b.创建
#set创建{}
set1 = {'a','b','c','c','d'}
print(set1)
#set创建set(tuple())
set2= set((1,2,3,4,3,3,2))
print(set2)
#set创建set(list[])
set3 = set([1,2,3,4,4,4,1,2,5])
print(set3)
c.方法
添加:
add只能添加一个,update可以添加多个。
set4 = {'a','b'}
set4.add('c')
print(set4)
set4.update('d','e')
print(set4)
删除:
#remove删除集合中的元素(删除一项) 如果不存在就会报错
#discard删除集合中的元素(删除一项)如果不存在不会报错
#pop(随机移除一个元素)
#clear(清空所有元素)返回set()
set1 = {'a', 'b', 'c', 'd'}
set1.remove('a')
>>>{'b','c','d'}
set1.discard('f')
set1.pop()
>>>{'b','c'}
set1.clear()
>>>set()
其他集合方法:
intersection(取交集,并生成新的集合)
intersection_update(取交集,修改原来的集合)
symmetric_difference(取交集,并生成新的集合)
symmetric_difference_update(取交集,改变原来的集合)
isdisjoint(判断交集,是返回False,否返回True)
issubset(判断子集)
issuperset(判断父集)
union(取并集,并生成新的集合)
update(取并集,改变原来的集合)
3.判断语句(要求掌握多条件判断)
if 条件判断:
执行语句
elif 条件判断:
执行语句
else:
执行语句
4.三目表达式
其他语言的三目运算
java:
int a = 100;
int b = 200;
int c = a>b?a:b;
python:
a = 100
b = 200
c = a if a>b else b
5.循环语句
while的循环语句
#continue 和 break 用法
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非双数时跳过输出
continue
print i # 输出双数2、4、6、8、10
i = 1
while 1: # 循环条件为1必定成立
print i # 输出1~10
i += 1
if i > 10: # 当i大于10时跳出循环
break
for循环
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for letter in 'Python': # 第一个实例
print '当前字母 :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二个实例
print '当前水果 :', fruit
print "Good bye!"