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():完全等价。

 

(2)遍历value值

 

>>> 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()完全等价

 

 

 

 

 

 

 

 

 

 

 


 

 
posted @ 2020-05-08 09:25  山河已无恙  阅读(216)  评论(0编辑  收藏  举报