zoukankan      html  css  js  c++  java
  • 20 【python】入门指南:常用数据结构

    Python内置了三种高级数据结构:list,tuple,dict

    list:数组,相同类型的元素组成的数组

    tuple:元组,相同类型的元素组成的数组,但是这里有限定条件(长度是固定的,并且值也是固定的,不能被改变)

    dict:字典,k-v结构的

    list数组

    1,初始化和遍历list

    #!/bin/python
    
    a = [1, 2, 3]
    print(a, type(a))
    
    for i in a:
        print(a)

    输出:

    [1, 2, 3] <class 'list'>
    [1, 2, 3]

    2,list添加和删除元素

    a = [1, 2, 3]
    a.append(4)
    print(a) # 1,2,3,4
    a.insert(1, 11)
    print(a) #1,11,2,3,4

    解释:append是在末尾添加元素,insert(n, data)在下标n的位置添加data,原先下标n的元素依次往后移动1位

    a = [1, 2, 3, 4]
    a.pop()
    print(a) # 1,2,3
    
    a = [1, 2, 3, 4]
    a.pop(1)
    print(a) # 1,3,4

    pop()默认将最后一个数值pop出来,pop(n)是将下标为n的位置元素pop出来(这里如果n大于最大下标,python会抛出异常out of range)

    整个将list清空掉

    a = [1, 2, 3]
    del a
    print(a)

    这里会报错:a is not defined,表名del a这个操作不是仅仅清空a的元素,而且把a本身从程序中删除掉

    3,查找元素(根据key和value来查找)

    判断a是否包含某个key值,要使用:key <= len(a) - 1

    a = [1, 2, 3, 4]
    if 3 <= len(a) - 1:
        print('a[3] exist')
    
    if 4 <= len(a) - 1:
        print('a[4] exist')
    else:
        print("a[4] does not exist")

    输出:

    a[3] exist
    a[4] does not exist

    元素查找:a.count(value)

    a = [1, 2, 3, 4]
    print(a.count(1)) #1
    print(a.count(5)) #0

    count返回a中包含元素value的次数

    元素查找:a.index(value)

    a = [1, 2, 3, 4]
    print(a.index(1)) #0
    print(a.index(0))

    index是返回value在a中所在的下标,如果value没在a中出现,则python抛出异常:{value} is not in list

    4,更新某个key值

    a = [1, 2, 3, 4]
    
    if 3 <= len(a) - 1:
        a[3] = 100
    else:
        print("a[3] does not exist")
    
    print(a, len(a)) #1,2,3,100

    更新某个key的value需要根据下标来更新,但是必须确定该key是未越界的,即不能大于len(a) - 1

    5,切片

    a = [1, 2, 3, 4, 5]
    
    print(a[:]) #[1, 2, 3, 4, 5]
    
    print(a[1:2]) #[2]
    print(a[1:-1]) #[2,3,4]
    print(a[1:0]) #[]
    print(a[1:]) #[2,3,4,5]
    
    print(a[:2]) #[1,2]
    print(a[:-1]) #[1,2,3,4]
    print(a[:0]) #[]
    
    print(a[-3:]) #[3,4,5]
    print(a[-3:-1]) #[3,4]
    print(a[-3:0]) #[]

    理解:a[n:m],从下标为n的元素开始从左往右数,数到下标为m-1的元素停止

    理解n或者m为负值,则他实际计算时遵循的公式是:len(a) + n或者len(a) + m

    比如a=[1,2,3,4,5], a[-1:]此处n为-1,实际开始下标为:len(a) + n = 5 + n = 5 - 1 = 4

    6,其它相关函数

    辅助函数1:enumerate

    a = [1, 2, 3, 4, 5]
    
    for i, v in enumerate(a):
        print(i, v)

    辅助函数2:count(计算list中包含某个元素的次数)

    辅助函数:排序相关,sort,reverse

    关于list的更详尽的内容参考:http://www.runoob.com/python/python-lists.html

    ===================tuple================

    元组:元组的初始定义就决定了它的长度,也决定了它的值。无法修改所有元素,也无法改变它的长度。

    import os
    
    a = (1, 2, 3)
    
    print(len(a))
    print(a[2])
    #print(a[4]) #out of range
    #a[0] = 3 #'tuple' object does not support item assignment
    #a.append(5) #no attribute
    
    os._exit(0)

    输出结果:

    3
    3

     ====================dict==================

    操作1:初始化和遍历dict

    1.1,初始化,并查看变量的类型

    a = {"a":"1", 'b':"2", "c":"3"}
    
    print(a, type(a))

    输出:

    {'a': '1', 'c': '3', 'b': '2'} <class 'dict'>

    1.2,遍历dict元素

    a = {"a":"1", 'b':"2", "c":"3"}
    
    for k, v in a.items():
        print(k, v)

    输出:

    a 1
    b 2
    c 3

    1.3,获取某个key的值

    get(key):获取dict中key对应的元素值

    a = {"a":"1", 'b':"2", "c":"3"}
    
    print(a.get("a"))
    print(a.get('d'))

    输出:

    1
    None

    注意,以上操作中get('d')是没有抛出异常的,意味着使用get总是安全的,只是需要检查返回值是否为None。

    a = {"a":"1", 'b':"2", "c":"3"}
    print(a.get('d') == None) #True

    操作2:新增/更新元素

    a = {"a":"1", 'b':"2", "c":"3"}
    
    #update
    a["a"] = "a"
    print(a)
    
    #insert
    a['d'] = '4'
    print(a)

    输出:

    {'b': '2', 'c': '3', 'a': 'a'}
    {'b': '2', 'c': '3', 'd': '4', 'a': 'a'}

    更新dict(a)的a对应的值:a['a'] = 'a'

    新增,直接使用赋值语句即可

    3,删除某个元素

    3.1,删除某个key

    a = {"a":"1", 'b':"2", "c":"3"}
    
    del a['a']
    print(a)

    a.pop('a') #效果和del相同

    输出结果:

    {'c': '3', 'b': '2'}

    3.2,rest整个dict为空dict{},但不回收空间

    a = {"a":"1", 'b':"2", "c":"3"}
    
    a.clear()
    print(a) #{}

    clear函数用来reset某个dict为{}

    3.3,删除整个dict,并回收空间

    a = {"a":"1", 'b':"2", "c":"3"}
    
    del a
    print(a) #a is not defined

    del和之前的list数组,操作结果一样的

    4,检查某个key是否存在

    a = {"a":"1", 'b':"2", "c":"3"}
    
    print('a' in a) #True
    print('d' in a) #False
    print('d' not in a) #True

    判断某个key是否存在,使用in语句:key in dict

    判断某个key不存在,使用not in语句:key not in dict

    5,主题:深拷贝和浅拷贝

    浅拷贝

    a = {"a":"1", 'b':"2", "c":"3"}
    
    b = a
    print(b)
    
    a["a"] = "abc"
    print(b)

    输出:

    {'c': '3', 'a': '1', 'b': '2'}
    {'c': '3', 'a': 'abc', 'b': '2'}

    可以看到,a的元素值改变时,b也跟随改变了。这说明,a和b其实是同一个dict,只是名称不同而已。

    我们来看赋值语句:b=a,这个赋值代表浅拷贝,实际完成的效果是引用。

    对应的是深拷贝,用dict中自带的copy函数来完成。

    a = {"a":"1", 'b':"2", "c":"3"}
    
    b = a.copy()
    print(b)
    
    a["a"] = "abc"
    print(b)

    输出:

    {'b': '2', 'a': '1', 'c': '3'}
    {'b': '2', 'a': '1', 'c': '3'}

    可以看到a的改变并为在b的print体现。

     6,其它辅助函数

    6.1,update

    a = {"a":"1", 'b':"2", "c":"3"}
    
    b = {"a": "b1", "d":"4",}
    
    a.update(b)
    print(a)

    输出:

    {'b': '2', 'a': 'b1', 'd': '4', 'c': '3'}

    如果不管a中是否有b中key,都将b的key来替代a中key;对于a中存在,b中不存在的,则保留。

    6.2,获取所有的key列表,及其value的列表

    a = {"a":"1", 'b':"2", "c":"3"}
    
    print(a.keys())
    print(a.values())

    注意这里返回的类型分别是dict_keys,dict_values类型,而不是简单的list。同时也可以看到,顺序和初始化a的顺序是不同的,但是这两个函数的返回值的顺序,和他们在a中出现的顺序是对应的。

    dict_keys(['c', 'b', 'a'])
    dict_values(['3', '2', '1'])
  • 相关阅读:
    hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***
    hdu 4272 2012长春赛区网络赛 dfs暴力 ***
    hdu 4063 福州赛区网络赛 圆 ****
    hdu 4069 福州赛区网络赛I DLC ***
    hdu 4061 福州赛区网络赛A 数学 ***
    hdu 4068 福州赛区网络赛H 排列 ***
    hdu 4070 福州赛区网络赛J 贪心 ***
    hdu 5366 组合数 *
    linux的rsync工具的常用选项及ssh同步介绍
    从U盘安装CentOS7.3教程
  • 原文地址:https://www.cnblogs.com/helww/p/9821753.html
Copyright © 2011-2022 走看看