python容器
数据类型:
Python七种标准数据类型:
-----------------+------------------------------------------------
| Number (数字,包含True、False)
不 +------------------------------------------------
可 | String (字符串)
变 +------------------------------------------------
类 | Tuple (元组)
型 +------------------------------------------------
| None (真空)
-----------------+------------------------------------------------
可 | List (列表)
变 +------------------------------------------------
类 | Set (集合)
型 +------------------------------------------------
| Dictionary (字典)
-----------------+------------------------------------------------
列表(list)
定义用"[]":有序、重复,列表是可变对象。如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素,以此类推,可以获取倒数第2个、倒数第3个。
若L=[...] print(L)
#整个列表 print(*L)
#用"*"拆出列表所有元素
组合类型函数,list(),tuple(),dict(),set(),frozenset()只能传入一个参数。 list适合当做[堆栈],queue.Queue作为[单向队列],collections.deque作为[双向队列]。
13、列表对象方法:
- 1)append(self, p_object):在原有列表最后位置上追加新元素到列表,不生成新的列表。
- 2)clear(self):清空列表里面的元素,不生成新列表。
- 3)copy(self):复制一份列表,相当于一次浅拷贝。
- 5)extend(self, iterable):把iterable中的每个元素扩展成列表的元素,iterable可以是字符串、列表、集合、元组、字典。
- 6)index(self, value, start=None, stop=None):查找列表中value元素索引位置,start与stop参数是查找起始与结束位置,默认为None。
- 7)insert(self, index, p_object):在列表index索引位置插入元素p_object,当index大于列表包含的元素个数时,在最后位置插入元素。
- 8)pop(self, index=None):从列表中取出index位置的值,index默认为None,此时弹除并返回列表中最后一个值。
- 9)remove(self, value):移除列表中第一个出现的value元素,value元素不存在列表中时,则抛出ValueError。
- 10)reverse(self):反转列表元素的位置。
- 11)sort(self, key=None, reverse=False):给列表中的元素排序,改变原列表!reverse默认False(升序)。【而sorted()函数是生成副本】。
- 12)[start:stop:step]:切片,从列表中取出一部分元素生成一个新列表,start与stop默认为None,step表示步长值,默认是一个接着一个切取, 如果为2,则表示进行隔一取一操作。步长值为正时表示从左向右取,如果为负,则表示从右向左取。步长值不能为0。
- 13)索引[index]:获取索引位置index的值。
列表list合并的4种方法
方法1: 直接使用"+"号合并列表
aList = [1,2,3] bList = ['www', 'pythontab.com'] cList = aList + bList dList = bList + aList print(cList) print(dList) # 结果: [1, 2, 3, 'www', 'pythontab.com'] ['www', 'pythontab.com', 1, 2, 3]
方法2: 使用extend方法
aList = [1,2,3] bList = ['www', 'pythontab.com'] aList.extend(bList) print(aList) # 结果: [1, 2, 3, 'www', 'pythontab.com']
方法3: 使用切片
aList = [1,2,3] bList = ['www', 'pythontab.com'] aList[len(aList):len(aList)] = bList # len(aList):len(aList) 为插入位置 print(aList) # 结果: [1, 2, 3, 'www', 'pythontab.com'] aList = [1,2,3] bList = ['www', 'pythontab.com'] aList[1:1] = bList print(aList) # 结果: [1, 'www', 'pythontab.com', 2, 3]
方法4: 使用append方法
a.append(b)
将b看成list一个元素和a合并成一个新的list,它和前面的方法的输出结果不同
aList = [1,2,3] bList = ['www', 'pythontab.com'] aList.append(bList) print(aList) # 结果: [1, 2, 3, ['www', 'pythontab.com']]
总结:
- 第一种方方法思路比较清晰,就是运算符的重载
- 第二种方法比较简洁,但会覆盖原始list;
- 第三种方法功能比较强大,可以将一个列表插入另一个列表的任意位置
- 第四种方法类似于第二种方法,但是输出的结果不同,如何使用需要看需求而定
python列表转换为字符串》
list_a=["345"]
str_a="".join(list_a)
List 遍历的4种方法:
方法1:
for i in list: print i 1 2
方法2:
for i in range(len(list)): print i, list[i] 1 2
方法3:
for i in xrange(len(list)): print i, list[i] 1 2
方法4:
for i, j in enumerate(list): print i, j 1 2
xrange 和range的区别:
range会直接将所有结果生成一个list对象
xrange则不会直接生成一个list,而是一个生成器,会每次调用返回其中的一个值
因此,xrange的循环性能比range好,尤其是当列表返回很大的情况。但是当你需要返回是一个列表的话,可以使用range
结论
对比发现,效率最快的为方法1,但是如果需要获得列表下标,方法4略微比2、3好。在list特别大的情况下,方法3优于方法2
讲讲深浅拷贝(拷贝的目标就是让数据复制并独立出来,拷贝越深,数据越独立):
1.浅拷贝:数据不完全独立,比如列表拷贝,只有第一维数据被独立,而更高维度的数据会共享引用(即同步修改)。
2.深拷贝:数据完全独立,比如列表拷贝,所有维度数据被独立。
14、元组(tuple),定义用"()":有序、重复,tuple和list非常类似,但是tuple是不可变对象,一旦初始化就不能修改,只读,更安全。
元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变!
如果可能,能用tuple代替list就尽量用tuple。
最好以","结尾,当tuple只有一个元素时,必须以","结尾。
元组对象方法:
1)count(self, value):统计元组中包含value元素的数量,返回一个int值。
2)index(self, value, start=None, stop=None):索引,查找元组中value元素第一个出现的位置,start与stop参数是查找起始与结束位置,默认为None。
3)[start:stop:step]:切片操作。
15、for <元素> in <范围>:,循环就是把每个元素代入变量x,然后执行缩进块的语句。
for _ in range(n):,使用下划线"_",循环n次执行循环体。此时"_"作为临时性的名称使用,忽略循环计数中的实际值。
16、range(x1, x2, 步长)函数,可以生成一个整数序列,长度为(x2-x1),左闭右开规则。range(n)范围是"0 ~ n-1"。
17、不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。
大多数循环并不需要用到break和continue语句。
(1)break只能用于循环体内。其效果是直接结束并退出当前循环,剩下的未循环的工作全部被忽略和取消。
(2)与break不同,continue语句用于跳过当前循环的剩余部分代码,直接开始下一轮循环。
字典(dict)
定义用{'k':'v'}:无序、不重复,字典是可变对象,在其他语言中也称为map,使用可哈希算法的键-值("key":"value")存储,具有极快的查找速度。字典无序。 通过in判断key是否存在,如果key不存在,返回false,如:'Thomas' in d;
字典对象方法:
- 1)clear(self):清除字典中的所有元素。
- 2)copy(self):复制一份元组,相当于一次浅拷贝。
- 3)fromkeys(self, iter, value=None):分别以iter中的元素为键,以value为值,创建一个字典。
- 4)get(self, k, d=None):获取字典中键为k的值,如果字典中不包含k,则给出d值,d默认为None。
- 5)items(self):遍历字典的一个方法,把字典中每对key和value组成一个元组,并把这些元组放在一个类似列表的dict_items中返回。
- 6)keys(self):遍历字典键keys的一个方法,返回一个类似列表的dict_keys,与items方法用法相同。
- 7) values(self):遍历字典值value的一个方法,返回一个类似列表的dict_values,与items方法用法相同。
- 8)pop(self, k, d=None):弹除并返回字典中键为k的值。
- 9)popitem(self):从字典中随机取出一组键值,返回一个新的元组。
- 10)setdefault(self, k, default=None):从字典中获取键为k的值,当存在k时,功能和get基本一致,当字典中不存在k时,在原字典上添加键为k、值为default的项,并返回default值。
- 11)update(self, E=None, **F):给字典新增元素,没有返回值。用法:dict.update(dict2)。
(1)遍历key值
>>> a {'a': '1', 'b': '2', 'c': '3'} >>> for key in a: print(key+':'+a[key]) a:1 b:2 c:3 >>> for key in a.keys(): print(key+':'+a[key]) a:1 b:2 c:3
在使用上,for key in a和 for key in a.keys():完全等价。
>>> for value in a.values(): print(value) 1 2 3
(3)遍历字典项
>>> for kv in a.items(): print(kv) ('a', '1') ('b', '2') ('c', '3')
(4)遍历字典健值
>>> for key,value in a.items(): print(key+':'+value) a:1 b:2 c:3 >>> for (key,value) in a.items(): print(key+':'+value) a:1 b:2 c:3
在使用上for key,value in a.items()与for (key,value) in a.items()完全等价