python(3)字典及列表

发布时间:2019-09-10 08:56:28编辑:auto阅读(1615)

    列表list:打了激素的数组

       数组是只能存储同一种数据类型的结构;

    数组: scores[43] = [12, 12.0, "hello"]

    元组tuple
    # 定义列表
    li = [1, 1.0, "westos", (1,2,3,4), [1,2,3,4]]
    # 定义元组

    t = (1, 1.0, "westos", (1,2,3,4), [1,2,3,4])

    输出:

    [1, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4]]

    (1, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4])
    # 元组是不可变数据类型,不能修改元素;
    #t[0] = 11
    # 列表是可变数据类型,可以修改元素;
       li[0] = 13
       li:
       [13, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4]]
    分析列表的特性(与元组对比)
    索引In [9]:
    print li
    # 正向索引
    li[0]
    # 反向索引
    li[-1]
    # 拿出列表最后一个元素, 最后一个元素是列表, 再拿出列表的第三个元素,如下 :
    li[-1][2]
    [13, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4]]
    3
    切片
    li
    # 去掉列表的第一个元素
    li[1:]
    # 逆序显示
    li[::-1]
    [[1, 2, 3, 4], (1, 2, 3, 4), 'westos', 1.0, 13]
    重复, 连接
    li * 2
    # 不建议这样连接两个列表,后面有效率更高的方法 ;
    li1 = ["westos", "new year"]
    li+li1
    [13, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4], 'westos', 'new ye
    ar']
    成员操作符
    print li
    print 13 in li
    print 13 not in li
    [13, 1.0, 'westos', (1, 2, 3, 4), [1, 2, 3, 4]]
    True
    False
    列表的增删改查

    # ip 白名单
    allow_ip = ["172.25.254.1","172.25.254.3", "172.25.254.26" ]
    print "追加元素到列表的最后:"
    allow_ip.append("172.25.254.250")
    print allow_ip
    print
    print "增加元素到列表的指定位置:"
    allow_ip.insert(0, "192.168.1.253")
    print allow_ip
    print
    # iterable 代表可迭代的;
    # 目前学习的可迭代对象有 : str, list, tuple
    print "增加多个元素到列表最后:"
    allow_ip.extend(["172.25.254.45", "172.25.56.21"])
    print allow_ip
    追加元素到列表的最后:
    ['172.25.254.1', '172.25.254.3', '172.25.254.26', '172.25.254.25
    0']
    增加元素到列表的指定位置:
    ['192.168.1.253', '172.25.254.1', '172.25.254.3', '172.25.254.2
    6', '172.25.254.250']
    增加多个元素到列表最后:
    ['192.168.1.253', '172.25.254.1', '172.25.254.3', '172.25.254.2

    6', '172.25.254.250', '172.25.254.45', '172.25.56.21']

    # 通过列表的索引,对列表某个索引值重新赋值;
    allow_ip[0] = "192.168.1.1"
    print allow_ip
    ['192.168.1.1', '172.25.254.1', '172.25.254.3', '172.25.254.26',
    '172.25.254.250', '172.25.254.45', '172.25.56.21']

    buy = ["apple", "computer","apple"]
    # 统计某个元素在列表中出现的次数 ;
    print buy.count("apple")
    # 找到某个值在列表中的索引值
    print buy.index("computer")
    2
    1

    In [58]:
    # 删除列表中遇到的第一个 value 值;
    buy.remove("apple")
    print buy
    # 删除列表中第 i 个索引值;
    del buy[0]
    print buy
    # 删除除了第一个元素之外的其他索引值
    del buy[1:]
    # 删除列表对象
    del buy
    ['computer', 'apple']
    ['apple']In [3]:
    li = [1,2,45,23,21, 45]
    # 删除指定索引对应的值,默认是最后一个元素 ;
    li.pop()
    print li
    # 删除列表的第一个索引 ;
    li.pop(0)
    [2, 45, 23, 21]
    其他的排序及逆转
    # 排序,如果说都是数字,按照数字大小排序 ;
    # 是字母的话,按照 ASCII 码来排序;
    # **** 如何查看对应的 ASCII 码 ? ord('a')
    li = [12, 34, 56, 8]
    li.sort()
    print li
    # 逆转; li[::-1]
    li.reverse()
    print li
    [8, 12, 34, 56]
    [56, 34, 12, 8]



    字典(dict)
    字典创建:
    1)赋值创建字典
    2)通过工厂函数创建字典
    # 赋值创建字典 , key-value , 键值对
    d = {"key1":"value1", "key2":"value2"}
    print d
    {'key2': 'value2', 'key1': 'value1'}
    In [2]:
    services = {"ssh":22, "ftp":[20,21], "http":[80, 8080]}
    print services
    {'ftp': [20, 21], 'http': [80, 8080], 'ssh': 22}
    In [3]:
    # 通过工厂函数创建字典
    userinfo = dict(user1="123", user2="456", user3 ="789")
    print userinfo
    {'user2': '456', 'user3': '789', 'user1': '123'}
    In [14]:
    # 通过字典的 fromkeys 方法创建字典,所有元素有一个默认值;
    # 如果没有指定默认值,默认为 None;
    print {}.fromkeys("hello")
    # 给每个元素设置默认值为 "123";
    print {}.fromkeys(["user1", "user2", "user3"], "123")
    {'h': None, 'e': None, 'l': None, 'o': None}
    {'user2': '123', 'user3': '123', 'user1': '123'}


    分析字典的特性(跟元组和列表比较)
    字典不能索引和切片,因为字典是无序的数据类型;
    字典不支持重复和连接;
    字典支持成员操作符: 判断字典的key值是否在字典中存在; in, not in字典的增删改查

    一 增

    字典名[key] = value
    d.update(a=1, b=2)
    d.update({'a':1, 'b',2})
    d.setdefault('a', 1)
    ** 重点: setdefault 和 update方法的不同
    services = {"ftp":[20,21]}
    # 通过字典名 [key]=value, 将 key-value 添加到字典中 ;
    services['http'] = [80, 8080]
    print services
    {'ftp': [20, 21], 'http': [80, 8080]}
    # update 方法实现添加: key 存在,覆盖 value 值, 否则,添加
    services = {"ftp":[20,21]}
    services1 = {'http':[80,8080]}
    # services.update(services1)
    # print services
    # 更建议使用
    services.update(http=[80,8080], ftp=22)
    print services
    {'ftp': 22, 'http': [80, 8080]}
    # setdefault 实现添加: key 存在,不覆盖 value 值, 否则,添加
    services = {"ftp":[20,21]}
    services1 = {'http':[80,8080]}
    services.setdefault("ftp", 22)
    print services
    {'ftp': [20, 21]}

    二 改


    字典名[key]=value
    d.update({'a':2, 'b':3})
    d.update(a=2, b=3)

    三 查:


    services = {'ftp': 22, 'http': [80, 8080]}
    # 查看 key 值
    services.keys()
    services.viewkeys()
    services.iterkeys()
    # 给 key 起名字
    # 查看 value 值
    services.values()
    # 查看 key-value 键值对
    services.items()
    [('ftp', 22), ('http', [80, 8080])]
    # 查看 key 是否存在 ;
    services.has_key('ftpp')
    # 查看指定 key 对应的 value 值;如果 key 不存在,不报错; 如果存在,返回 value 值;
    # services['ftp'] 如果 key 不存在,直接报错;
    services.get('ftpp')

    四 删


    d.pop(key) 删除指定 key 的字典元素;
    d.popitem() 随机删除字典的 key-value 元素 ;
    del d[key] 删除指定 key 的字典元素;
    d.clear() 清空字典元素
    循环遍历字典
    In [41]:
    for i,j in services.items():
    print i,j
    ftp 22
    http [80, 8080]
    In [43]:
    # 默认情况下遍历字典的 key 值;
    for i in services:
    print i
    ftp
    http


    字典应用
    应用1: 通过字典实现case语句
    目前python不支持case语句;
    实现case语句的两种方式:
    if...elif...elif...else...
    字典实现In [ ]:
    # if...elif...elif...else... 实现:
    #coding:utf-8
    """
    # 实现四则运算
    - 用户分别输入第一个数字,运算操作符,第三个数字;
    - 根据用户的运算操作打印出运算结果;
    """
    from __future__ import division
    num1 = input()
    ope = raw_input()
    num2 = input()
    # case 语句
    if ope == "+":
    print num1+num2
    elif ope == "-":
    print num1-num2
    elif ope == "*":
    print num1*num2
    elif ope == "/":
    print num1/num2
    else:
    print "error operator"In [ ]:
    # 字典实现 case 语句
    #coding:utf-8
    """
    # 实现四则运算
    - 用户分别输入第一个数字,运算操作符,第三个数字;
    - 根据用户的运算操作打印出运算结果;
    """
    from __future__ import division
    num1 = input()
    ope = raw_input()
    num2 = input()
    d = {
    "+":num1+num2,
    "-":num1-num2,
    "*":num1*num2,
    "/":num1/num2,
    }
    if not ope in d:
    print "error operator"
    else:
    print d[ope]

关键字