第十节课:再议数据结构与数据类型

一、list, dict, tuple之它们其实是好基友

1. 没有最优秀的数据结构,只有最适用的.

2. 了解每个数据结构才能活学活用

3. 它们相互转化如此简单

ps:如果一个问题能用Python的内置数据类型解决,推荐使用内置的数据类型,这样做的效率是比较好的.

list[1,2,3,4] 是有序的

list[0]

list[1]

list[2]

如果涉及到的问题是有顺序的就可以考虑使用list

字典是键值(本质上list也是键值,键就是游标,只不过是整型), 但字典的键可以是字符串(语义性更强,这在现实中有很多场景,比如学生所有课程的成绩),也可以是tuple.

元组与列表转换

    a = [1,2,3,4]

    a = list(a)

    a = tuple(a)

将list转成字典 , list需要满足一定格式

    a = [(1,3),(2,4)]

    a = dict(a)

这种方法是比较常用的. 在实际处理数据的过程中,我们可以会碰到各种各样的情况,这时候对数据结构进行转换并使用恰当方法对原数据进行处理显的很重要.

二、“推导式”(列表推导)再议

推导式的性能是非常不多的,我们要多使用. 下面我们看看列表推导式的本质.

    # coding=utf-8

    """

    [0,1,2,3,4,5,6,7,8,.....,100]

    """

    x = [x for x in xrange(101)]

    print x 

    """ 进行拆解,从外到里,从左到右

    第一部分 []

    第二部分 x 

    第三部分 for x in xrange(101)

    """

    new_list = []

    for x in xrange(101):

        new_list.append(x)

    print new_list

    """

三、排序

1. sorted

查看整型的帮助文档有两个方法,如下

    help(1)

    help(int)

    help(sorted)

    >>> help(sorted)

        Help on built-in function sorted in module __builtin__:

    sorted(...)

        sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

    iterable: 必选参数,填入一个可迭代对象

    reverse:  反转,倒序 

    >>> a = [1,2,3,4]

    >>> sorted(a,reverse=True)

    [4, 3, 2, 1]

    >>> a

    [1, 2, 3, 4]

    注意:sorted并不是原地更改,需要赋值. 这和 sort方法不一样. 

    >>> help(a.sort)

        Help on built-in function sort:

    sort(...)

        L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

        cmp(x, y) -> -1, 0, 1

    sort和sorted参数是一样的. 

    >>> a = [1,2,3,4]

    >>> a.sort(reverse = True)

    >>> a

    [4, 3, 2, 1]

    注意: sort原地修改a, 这个sorted是不同的, 另外两者使用方法是不一样的. sorted(a, reverse=True)  a.sort(reverse=True) sorted本质上是针对可迭代对象的函数, 而sort是针对可迭代对象的内置方法. 

2. list之sort方法

2.1 key 最好用

2.2 cmp是什么 (a>b) - (a<b)

下面我们讲讲key可选参数 : key是对列表中的元素进行操作,并针对操作后的结果进行排序.

    a = [‘12323‘, ‘2343443‘, ‘99‘]

    a.sort(key=int)  # 将字符以数字的形式进行排序 

    a = [(‘a‘,2),(‘c‘,4),(‘b‘,3)]

    a.sort(key = lambda x: x[1])

    a.sort(key = lambda x: x[1], reverse = True)

    cmp(2,1) == (2>1) - (2<1) == 1 - 0 == 1

    cmp(1,3) == (1>3) - (1<3) == 0 - 1 == -1

    cmp(2,2) == (2>2) - (2<2) == 0 - 0 == 0 

    cmp(a,b)返回三个值, a>b 返回1, a<b 返回 -1, a=b 返回0

    cmp 在python3中已经被废弃,性能也不好. 

3. 多级排序怎么办

    >>> a = [(5,6,3),(3,6,9),(1,7,5)]

    >>> import operator 

    >>> a.sort(key=operator.itemgetter(1,2))

    >>> a

    [(5, 6, 3), (3, 6, 9), (1, 7, 5)]  # 先根据游标1 进行排序后,在根据游标2 进行排序. 

    关于模块 operator 可以自行深入研究. 

4. 字典如何排序

作为作业可以自行研究.

四、字符串模板应用

1. 回忆一下,字符串模板有哪几种方式?

    ‘%s is a %s‘ % (‘he‘,‘boy‘)

    ‘%(who)s is a %(gender)s‘ % dict(who = ‘he‘, gender = ‘boy‘)

    ‘%(who)s is a %(gender)s‘ % {‘who‘:‘he‘, ‘gender‘:‘boy‘}

    ‘{who} is a {gender}‘.format(who = ‘he‘, gender = ‘boy‘)

    ‘{} is a {}‘.format(‘he‘, ‘boy‘)

2. 典型应用1: html模板

    http://news.163.com/16/0529/01/BO6S19K100014AED.html

    网易首页 > 新闻中心 > 滚动新闻 > 正文

    华东理工研二学生命丧导师参股工厂(图)

    2016-05-29 01:47:34 来源: 新京报(北京)

    http://news.163.com/16/0528/19/BO651SAG000146BE.html

    网易首页 > 新闻中心 > 滚动新闻 > 正文

    总理力推“放管服” 国务院准备这么做

    2016-05-28 19:09:36 来源: 中国新闻网(北京)

    整个网页都是模板做的,留着占位符,动态地把请求的内容往里面填写. 

3. 针对性比强大更重要

    我们虽然推荐用.format形式, 但也要根据实际情况分析, 当数据库中是键值对的时候,可能用占位符 + 字典形式传入会更好.

一、list, dict, tuple之它们其实是好基友     1. 没有最优秀的数据结构,只有最适用的.     2. 了解每个数据结构才能活学活用        3. 它们相互转化如此简单

ps:如果一个问题能用Python的内置数据类型解决,推荐使用内置的数据类型,这样做的效率是比较好的. 
    list[1,2,3,4] 是有序的     list[0]    list[1]    list[2]
    如果涉及到的问题是有顺序的就可以考虑使用list    字典是键值(本质上list也是键值,键就是游标,只不过是整型), 但字典的键可以是字符串(语义性更强,这在现实中有很多场景,比如学生所有课程的成绩),也可以是tuple.
    元组与列表转换
    a = [1,2,3,4]    a = list(a)    a = tuple(a)
    将list转成字典 , list需要满足一定格式    a = [(1,3),(2,4)]    a = dict(a)
    这种方法是比较常用的. 在实际处理数据的过程中,我们可以会碰到各种各样的情况,这时候对数据结构进行转换并使用恰当方法对原数据进行处理显的很重要.

二、“推导式”(列表推导)再议推导式的性能是非常不多的,我们要多使用. 下面我们看看列表推导式的本质. 
# coding=utf-8
"""[0,1,2,3,4,5,6,7,8,.....,100]
"""
x = [x for x in xrange(101)]print x 
""" 进行拆解,从外到里,从左到右第一部分 []第二部分 x 第三部分 for x in xrange(101)"""
new_list = []for x in xrange(101):new_list.append(x)
print new_list
"""

三、排序    1. sorted 
    c查看整型的帮助文档有两个方法,如下    help(1)    help(int)
    help(sorted)
    >>> help(sorted)Help on built-in function sorted in module __builtin__:
sorted(...)    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    iterable: 必选参数,填入一个可迭代对象    reverse:  反转,倒序

>>> a = [1,2,3,4]>>> sorted(a,reverse=True)[4, 3, 2, 1]>>> a[1, 2, 3, 4]
注意:sorted并不是原地更改,需要赋值. 这和 sort方法不一样. 
>>> help(a.sort)Help on built-in function sort:
sort(...)    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;    cmp(x, y) -> -1, 0, 1
    sort和sorted参数是一样的. 
    >>> a = [1,2,3,4]>>> a.sort(reverse = True)>>> a[4, 3, 2, 1]
注意: sort原地修改a, 这个sorted是不同的, 另外两者使用方法是不一样的. sorted(a, reverse=True)  a.sort(reverse=True) sorted本质上是针对可迭代对象的函数, 而sort是针对可迭代对象的内置方法.

2. list之sort方法      2.1 key 最好用       2.2 cmp是什么 (a>b) - (a<b)

下面我们讲讲key可选参数 : key是对列表中的元素进行操作,并针对操作后的结果进行排序. 
a = [‘12323‘, ‘2343443‘, ‘99‘]a.sort(key=int)  # 将字符以数字的形式进行排序

a = [(‘a‘,2),(‘c‘,4),(‘b‘,3)]a.sort(key = lambda x: x[1])a.sort(key = lambda x: x[1], reverse = True)

cmp(2,1) == (2>1) - (2<1) == 1 - 0 == 1    cmp(1,3) == (1>3) - (1<3) == 0 - 1 == -1    cmp(2,2) == (2>2) - (2<2) == 0 - 0 == 0 
    cmp(a,b)返回三个值, a>b 返回1, a<b 返回 -1, a=b 返回0
    cmp 在python3中已经被废弃,性能也不好.

3. 多级排序怎么办
>>> a = [(5,6,3),(3,6,9),(1,7,5)]>>> import operator >>> a.sort(key=operator.itemgetter(1,2))>>> a[(5, 6, 3), (3, 6, 9), (1, 7, 5)]  # 先根据游标1 进行排序后,在根据游标2 进行排序. 
关于模块 operator 可以自行深入研究.

4. 字典如何排序    作为作业可以自行研究.

四、字符串模板应用  1. 回忆一下,字符串模板有哪几种方式?

‘%s is a %s‘ % (‘he‘,‘boy‘)‘%(who)s is a %(gender)s‘ % dict(who = ‘he‘, gender = ‘boy‘)‘%(who)s is a %(gender)s‘ % {‘who‘:‘he‘, ‘gender‘:‘boy‘}
‘{who} is a {gender}‘.format(who = ‘he‘, gender = ‘boy‘)‘{} is a {}‘.format(‘he‘, ‘boy‘)

2. 典型应用1: html模板
http://news.163.com/16/0529/01/BO6S19K100014AED.html网易首页 > 新闻中心 > 滚动新闻 > 正文华东理工研二学生命丧导师参股工厂(图)2016-05-29 01:47:34 来源: 新京报(北京)
http://news.163.com/16/0528/19/BO651SAG000146BE.html网易首页 > 新闻中心 > 滚动新闻 > 正文总理力推“放管服” 国务院准备这么做2016-05-28 19:09:36 来源: 中国新闻网(北京)
整个网页都是模板做的,留着占位符,动态地把请求的内容往里面填写.

3. 针对性比强大更重要 我们虽然推荐用.format形式, 但也要根据实际情况分析, 当数据库中是键值对的时候,可能用占位符 + 字典形式传入会更好.

时间: 2024-12-28 01:37:20

第十节课:再议数据结构与数据类型的相关文章

centos DNS服务搭建 第三十节课

centos  DNS服务搭建     第三十节课 上半节课 下半节课 一. DNS原理相关DNS 为Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种服务机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. DNS使用TCP和UDP, 端口号都是53, 但它主要使用UDP,服务器之间备份使用TCP.全世界只有13台“根”服务器,1个主根服务器放在美国,其他12台为辅根服务器,DN

centos LAMP第二部分apache配置 第二十节课

centos   LAMP第二部分apache配置  第二十节课 上半节课 下半节课 f

centos mysql 优化 第二十节课

centos mysql  优化  第二十节课 f

centos shell编程6一些工作中实践脚本 第四十节课

centos   shell编程6一些工作中实践脚本    第四十节课 上半节课 下半节课 f

2018.11.30 第十节课 冲鸭 &#129414;&#129414;&#129414;&#129414;&#129414;&#129414;

第十课 IPtables 与 Firewalld 防火墙 这节课学习的是相当轻松,网络是强项. -------------------------------------------------------------- 本节课核心 1.Linux系统中的一切都是文件. 2.配置一个服务就是在修改其配置文件. 3.要想让新的配置送文件立即生效,重启对应的服务. --------------------------------------------------------------------

信管师培训之第十节课作业(风险管理+项目收尾管理+知识产权管理)

第18章 风险管理 1.风险管理包括哪六个过程?(记) 项目风险管理过程包括如下内容: (1).风险管理规划. (2).风险识别. (3).定性风险分析. (4).定量风险分析. (5).应对计划编制. (6).风险监控. 2.什么是应急计划?请举例.应急计划,是指当一项可能的风险事件实际发生时项目团队将采取的预先确定的措施.例如,当项目经理根据一个新的软件产品开发的实际进展情况,预计到该软件开发成果将不能及时集成到正在按合同进行的信息系统项目中时,他们就会启动应急计划,例如采用对现有版本的软件

0530 第十节课

一.软件包管理内容 rpm包管理 yum 编译安装 注意:安装软件必须要管理员身份才可以 安装用到的命令 ldconfig -p:查看本机库 -v:生成缓存 安装用到的配置文件 /etc/ld.so.conf 缓存文件 /etc/cache 二.rpm包管理 rpm -i [install-options] PACKAGE_FILE rpm数据库-----/var/lib/rpm rpm --initdb:初始化,数据库实现不存在的话会创建 rpm --rebuild :重建,无论数据库存不存在

Linux学习第十节课(2019.9.27)

今晚老刘讲第八章,防火墙虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤.防火墙策略可以基于流量的源目地址.端口号.协议.应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃.这样一来,就可以保证仅有合法的流量在企业内网和外部公网之间流动了.课程的主要内容就是4个配置网卡方法,iptables(不考)理解即可,工作需要再查询,firewall-cmd命令(明天firewall-config图形化,讲

centos mysql 实战 第十节课

复制中的疑难杂症 排查思路master/slave都在一个交换机下 你管理的复制结构中都遇到什么问题1. 复制延迟 show slave status\G; 用那两个变量能表示从库执行到的位置SQL_thread: relay_master_log_file ,exec_master_log_pos slave上: IO_THREAD 从主库获取日志是那两个变量呢 IO_THREAD: master_log_File read_master_log_pos 发生延迟时,希望看一下日志里发生了什么