python:数据结构,列表,字典,元组,集合

https://www.cnblogs.com/Vennet/p/4110059.html

https://blog.csdn.net/ZOU19900101/article/details/79103515

列表:shoplist = ['apple', 'mango', 'carrot', 'banana']
字典:di = {'a':123,'b':'something'}
集合:jihe = {'apple','pear','apple'}
元组: t = 123,456,'hello'

 

1.列表 :可重复,类型可不同,可内嵌

1.列表是Python中使用最频繁的数据类型 
2.列表可以完成大多数集合类的数据结构实现。 
3.列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套) 
4.和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表 
5.List内置了有很多方法,例如append()、pop()等等 
6.List可以使用+操作符进行拼接 
7.[注意]与Python字符串不一样的是,列表中的元素是可以改变的
 

基本操作函数

1、索引,切片,加,乘,检查成员

2、增加,删除,连接分割,排序倒叙

迭代操作

1.zip两个列表操作 
2.list映射解析 
3.创建二维列表


    空列表:a=[]
    函数方法:a.append(3)       >>>[3]    
          a.extend([3,4,5])       >>>[3,3,4,5]    添加一个列表序列
          a.insert(1,'hello')        >>>[3,'hello',3,4,5]
          a.remove(3)             >>>['hello',3,4,5] 删除第一个出现的3,没有3则报错
          a.pop()              >>>['hello',3,4]
          a.pop(0)              >>>[3,4]
          a.index(4)          >>>1    返回出现的第一个4的下标
          a.count(3)          >>>1    列表中元素3的个数
          a.sort        >>>[3,4]    排序
          a.reverse()        >>>[4,3]    反序
    删除元素的方法
        a.remove(3)    通过值删除元素,删除第一个为参数值得元素
        a.pop()       通过下标删除元素,默认删除列表最后一个值,带参数则删除下标为参数值的元素
        del a[0]       通过下标删除元素,
            del a[2:4] 删除a表下标为2,3的元素
        del a[:]   删除a列表所有元素
        del a       删除列表
    列表推导式:
        vec = [2,4,6]    
         [3*x for x in vec if x<6]    >>>[6,12]    3*2,3*4
        vec2 = [1,2,3]
        [x*y for x in vec for y in vec2]    >>>[2,4,6,4,8,12,6,12,18]
    嵌套列表推导式:
        mat = [
        [1,2,3],
        [4,5,6],
        [7,8,9]
        ]
        print ([[row[i] for row in mat] for i in [0,1,2]])    
        >>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    思考:list (zip(mat)) 和 list (zip(*mat))结果会有什么不同

extend(扩展) 与 append(追加) 看起来类似,但实际上完全不同

extend 接收一个参数,这个参数总是一个list,并且这个list中的每个元素添加到原list中

append 接收一个参数,这个参数是可以是任何类型,并且简单的追加到list的尾部


2.元组  和list 结构上没有啥区别,唯一的差异是元组是只读,不能修改,元组用()表示


    空元组:t = ()
    元组赋值: t = (123,345,‘a’,'5')
           t[0]         >>>123

t[2]、 t[-1]、 t[1:3] 元组切片,原元组不变

1 in t 

for item in t: for in 

       print item 

item的序号 可以使用下面遍历方法

for index in range(len(tuple1)):

         print tuple1[index]

使用内置的enumerate函数

for index,item in enumerate(tuple1):

       print '%i,%s' %(index,item)


3.字典     键和值之间一一的关系,但是他是无序的方式存储,python的dictionary 像java 中的hashtable类的实例,定义 Dictionary 使用一对大(花)括号” { } “

  • Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型,包括字符串、整数、对象,甚至其它的 dictionary。
  • 在单个 dictionary 里,dictionary 的值并不需要全都是同一数据类型,可以根据需要混用和匹配。


    d = {'Jack':'[email protected]','Tom':'[email protected]'}
    d['Jack']            >>>'[email protected]
    d['Jim'] = '[email protected]'    >>>{'Jim': '[email protected]', 'Jack': '[email protected]', 'Tom': '[email protected]'}             

  del d['Jim']    >>>{'Jack': '[email protected]', 'Tom': '[email protected]'}  //删除 一个键值对

    dict1.clear()  clear 从一个dictionary中清除所有的元素
    list(d.keys())    将返回一个字典中所有关键字组成的无序列表
    sorted(d.keys()) 将返回一个字典中所有关键字组成的排序列表
    dict()    构造函数可以直接从key-value对中创建字典
    dict([('Tim',123),('Tiny',234)])    >>>{'Tiny': 234, 'Tim': 123}    
    推导式创建字典:
        {d2:d2+'@main.com' for d2 in list(d.keys())}
            >>>{'Jack': '[email protected]', 'Tom': '[email protected]'}
    练习:循环输出字典中的键值对:
        for name,email in d.items():
            print(name,email)


4.集合 无序不重复的元素集,基本功能包括关系测试和消除重复元素,集合对象还支持 union(联合),intersection(交) difference(差)和sysmmetric difference(对称差集)等数字运算,由于集合是无序,所以sets 不支持索引,分片,或其他类序列(sequence-like)等操作。

  • 集合也存在不可变形式,frozenset为固定集合.
  • set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
  • 注意:想要创建空集合,你必须使用 set() 而不是 {} ,后者用于创建空字典

可以通过一个set函数转换成集合,如:
 


    空集合:A = set() ※想要创建空集合,必须使用set()
    演示:
    basket = {'apple','orange','apple'}    >>>{'orange', 'apple'}    注意重复的元素只显示一个?
    'apple' in basket              >>>True
    'pear' in basket            >>>False

    集合的数学运算:    
        a = set('ababcdabca')        >>>{'c', 'b', 'a', 'd'}
        b = {'a','b','m'}            >>>{'b', 'a', 'm'}
        a - b        >>>{'c', 'd'}
        b - a        >>>{'m'}
        a | b        >>>{'c', 'd', 'b', 'a', 'm'}
        a & b        >>>{'a','b'}
        a ^ b        >>>{'c','d','m'}
    集合推导式:
       {x for x in a if x not in 'ab'}    >>>{'c','d'}

# 使用 set 函数创建集合
list1 = [6, 7, 7, 8, 8, 9]
set2 = set(list1)

set2.add(10)  # 添加新元素
print set2  # set([8, 9, 10, 6, 7])  去掉重复内容,而且是无序的

set3 = frozenset(list1)
#set3.add(10)  # 固定集合不能添加元素,会报错AttributeError: 'frozenset' object has no attribute 'add'

### 集合有并集,交集,求差操作
### a & b 并集:intersection() 方法返回一个新集合,包含在两个集合中同时出现的所有元素。
### a | b 交集:union() 方法返回一个新集合,包含在两个 集合中出现的元素。
### a - b 差集:difference() 方法返回的新集合中,包含所有在 集合A出现但未在集合B中的元素。
### a ^ b 对称差集:symmetric_difference() 方法返回一个新集合,包含所有只在其中一个集合中出现的元素。

# 删除元素
set2.discard(6)   # 当元素不存在时,不会引发异常
set2.remove(6)    # 与discard的区别在于,如果没有要删除的元素,remove会引发一个异常
set2.pop()  # 因为set是无序的,所以pop会随机的从set中删除一个元素

猜你喜欢

转载自blog.csdn.net/weixin_41108334/article/details/85873680