下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 07 | 序列的概念
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

零基础学Python

共71讲 · 71课时·约540分钟
16024
免费
01 | Python语言的特点
免费
02 | Python的发展历史与版本
免费
03 | Python的安装
免费
04 | Python程序的书写规则
免费
05 | 基础数据类型
免费
06 | 变量的定义和常用操作
07 | 序列的概念
08 | 字符串的定义和使用
09 | 字符串的常用操作
10 | 元组的定义和常用操作
11 | 列表的定义和常用操作
12 | 条件语句
13 | for循环
14 | while循环
15 | for循环语句中的if嵌套
16 | while循环语句中的if嵌套
17 | 字典的定义和常用操作
18 | 列表推导式与字典推导式
19 | 文件的内建函数
20 | 文件的常用操作
21 | 异常的检测和处理
22 | 函数的定义和常用操作
23 | 函数的可变长参数
24 | 函数的变量作用域
25 | 函数的迭代器与生成器
26 | Lambda表达式
27 | Python内建函数
28 | 闭包的定义
29 | 闭包的使用
30 | 装饰器的定义
31 | 装饰器的使用
32 | 自定义上下文管理器
33 | 模块的定义
34 | PEP8编码规范
35 | 类与实例
36 | 如何增加类的属性和方法
37 | 类的继承
38 | 类的使用-自定义with语句
39 | 多线程编程的定义
40 | 经典的生产者和消费者问题
41 | Python标准库的定义
42 | 正则表达式库re
43 | 正则表达式的元字符
44 | 正则表达式分组功能实例
45 | 正则表达式库函数match与s...
46 | 正则表达式库替换函数sub...
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹...
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumP...
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代...
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式ge...
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链...
68 | Beautiful Soup的安装和...
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下...
71 | 如何分析源代码并设计合理...
本节摘要

课程源码、课件及课后作业地址:

https://github.com/wilsonyin123/geekbangpython

精选留言(23)

  • 2018-05-30
    如果变量只想要第一个,及第三个要怎么办?

    作者回复: 我想你是想要知道如何同时取得一个字符串(序列)的第一个和第三个元素,在Python中有一种非常简便的实现方法:
    假设有字符串:
    aString = ‘abcd’,
    将字符串同时赋予四个变量,既:
    x1, x2, x3, x4 = aString
    那么 x1 就是字符串的第一个元素,x3 就是第三个元素了是不是很灵活,而且对序列类型都可以生效的
    还有一种情况要在编程中考虑到,如果字符串中的元素比较多的时候,如:
    aString = ‘abcdefg’
    不需要定义更多的变量来一一对应元素个数,可以使用 *(星号)来匹配,同样取出第一个第三个元素,使用
    x1, x2, x3, *x4 = aString # 注意x4变量前面的星号
    使用x1, x3 变量依然可以取出第一个和第三个元素,而且这样编写程序适用范围更广泛哦

    17
  • 2018-05-30
    老师,你好,我想学习Python后期能够编程自动化自己一些重复的运维工作,后期能不能简单讲点使用Python访问数据库的知识,oracle,MySQL等。以及能不能调用JAVA开发的接口等工作。

    作者回复: * python访问数据库
    使用Python进行运维自动化是非常有效达成目标,也非常有“钱”景的。为了照顾更多的0基础学员,我在课程中没有涉及到具体的数据库操作;考虑运维平台的场景,绝大多数场景会使用MySQL作为数据库,Python直接访问MySQL数据库的代码不用自己编写,在MySQL的官方网站有关于库的安装、代码样例、练习、API参考甚至二次开发的样例,位置在
    https://dev.mysql.com/doc/connector-python/en/
    另外在编写运维自动化时,还会遇到并非直接访问数据库,而是使用Python编写的web框架访问数据库,框架程序会将上面提到的连接器进行封装,用更高级的方式访问数据库;如Django Web框架会使用django.db模块,参考代码为:
    https://docs.djangoproject.com/en/2.0/topics/db/models/
    如Flask 框架会使用SQLAlchemy访问MySQL数据库,参考代码如下:
    http://flask.pocoo.org/docs/1.0/patterns/sqlalchemy/
    具体连接数据库的方式要根据你如何编写Python的程序而定。

    * 调用java开发的接口
    关于Python调用已经编写好的Java程序的接口呢,首先要清楚Java程序提供的接口规范:如果是跨主机访问要搞清楚,java程序提供的是TCP访问协议还是HTTP(S)协议,在协议之上还要了解API的规范(就是互相通信的格式了),目前比较流行的有JSON、XML两种格式,当然也有公司使用自己的API规范,如Google开放出来的Protobuf等。由于接口实现形式是多种多样的,不妨先从使用requests库和json库学起,先学会使用HTTP协议通过JSON格式进行通信,这也是各大公有云厂商普遍使用的API提供方式。

    11
  • 老师,对于序列切片这里有个问题向您请教,我要打印出987,用普通方法是这样实现的:
    str_give='123456789'
    s1=[str_give[i] for i in range(8,5,-1)]
    请问,如何使用切片来完成,我用str_give[-3:]取出的是789
    求指教

    作者回复: str_give[:5:-1]

    1
    3
  • 2019-03-06
    我是现在在学习的,不知道下面这个问题老师能不能解答一下:
    有一点点计算机知识,能理解把字符串看成数组,然后通过下标访问的方法,但是,下面这个讲解看不懂:
    x1, x2, x3, x4 = aString
    那么 x1 就是字符串的第一个元素,x3 就是第三个元素了是不是很灵活,而且对序列类型都可以生效的
    还有一种情况要在编程中考虑到,如果字符串中的元素比较多的时候,如:
    aString = ‘abcdefg’
    不需要定义更多的变量来一一对应元素个数,可以使用 *(星号)来匹配,同样取出第一个第三个元素,使用
    x1, x2, x3, *x4 = aString # 注意x4变量前面的星号
    使用x1, x3 变量依然可以取出第一个和第三个元素,而且这样编写程序适用范围更广泛哦

    这一个我不太懂怎么理解,如果是说4个变量对应字符串4个字符,勉强能接受(虽然不大能理解),但是*x4这种就不太能理解了
    如果老师看到希望能解释一下,谢谢
    展开

    作者回复: 我们可以从编程的目的(需求)入手,有时候需求开发一个 “把一串字符拆分成多个单独的字符”的需求,
    当aString变量的值只包含四个字符"abcd"s时,用x1, x2, x3, x4 = aString 这种表达式,可以依次把每个字符取出来,像你理解的那样,一个变量对应一个字符;
    可是现实应用会很复杂,如果aString 有100个字符,赋值的时候,我们就不能写x1,x2...x100 写100个变量,这时候需要使用 *变量的方法来写。如果你的需求是取一个包含100个字符的字符串前三个字符,可以写为 x1, x2, x3, *x4 = aString , 用 x1 x2 x3 表示前三个字符,*x4表示第四到第100个字符。

    3
  • 老师,能不能具体解释下【下标冒号两边数字代表的具体意思?为什么第一个数字标志自己的位置,第二个数字却要在自己的位置减1?

    作者回复: 下标是访问序列非常灵活的方法,字符串、元组、列表都属于序列,因此可以使用下标访问其中的元素。我们取序列的单个元素就可以使用下标方式,通常会使用两种方法:从前向后取,或者从后向前去取。例如有字符串’abcdefg…xyz’,我们希望从前向后依次取前三个字符可以使用如下方式:
    str1 = 'abcdefg...xyz'
    str1[0] # 取第一个元素,注意下标要从0开始
    str1[1] # 取第二个元素
    str1[2] # 取第三个元素

    而从后向前取每个元素,在一些编程语言里要先计算长度,根据最长长度减1、减2、减3 的方法取得倒数三个元素,在Python中,为了简化操作,直接使用-1、-2、-3做下标,省略了计算长度的步骤,如:
    str1[-1] # 取最后一个元素
    str1[-2] # 取倒数第二个元素
    str1[-3] # 取倒数第三个元素

    还有一些需求要取序列中一些连续的元素,如第一个到第五个元素时,不必单独取5次,这时需要使用”:”,即:
    str1[0:5] # 第一个元素从0下标开始,到5下标前一个元素结束,5下标对应的元素不会被取出

    如果要从第一个元素连续取到字符串的结尾可以使用
    str1[0:] 或者 str[ : ] 方式
    如果要从第一个元素连续取到字符串倒数第二个元素可以使用
    str1[0:-1]
    冒号在序列的作用就是取得连续元素的功能,也形象的叫做切片

    3
  • 2019-03-04
    老师,我想问一下:
    在讲解和留言中,通过下标取连续值,没有看到倒着取连续的数
    比如生肖中:xiao = "鼠牛虎兔龙蛇马羊猴鸡狗猪"

    从左往右正着取值是这个:
    x = xiao [0 : 5] # 取从第一个到第5,即为鼠牛虎兔龙

    那如果是想取,猪狗鸡呢,
    x = xiao [-1 : -4] #这个好像是不行的
    是不是一定得是这样写呢:
    x = xiao [9 : 13] 或者我看评论里是 x = xiao [ 9 : ]
    换而言之,用下标取值只涉及取什么值,而不关注取出来值的排列顺序
    展开

    作者回复: 第一个问题,序列从前往后取值用正数,从后往前可以用负数,如果是一个范围应该写作 xiao[-4:-1]
    第二个问题,如果是想取猪狗鸡这里涉及到取最后一个值,要用xiao[-3:]

    2
    2
  • 2018-12-20
    按照老师讲的写了
    chinese_zodiac = '鼠牛虎兔龙蛇马羊猴鸡狗猪'
    print(chinese_zodiac[0:4])
    运行后报错
    @NotNull method com/intellij/execution/configurations/GeneralComandLine.getExePath must not return null
    展开

    作者回复: python解释器配置的不正确,参考python安装视频和视频下方的课后答疑,在pycharm界面选择运行-窗口右侧的 python interpreter 选择正确的python.exe解释器

    1
  • 虽然课程基础了点,但是才发现评论里的问答可以让我们学习到好多进阶的东西啊,谢谢老师认真而详细的回复,点个赞!

    作者回复: 嗯,课程面向的是没有编程基础的同学,甚至非计算机专业的同学,所以会以最基础的讲解为主。距离掌握python高级技巧还是有些距离的,要根据未来应用的方向多补充相关模块和提高编码能力

    1
  • 2018-07-17
    # 4、序列课后习题
    # 练习一 输出字符串
    str1 = 'Hello Python'
    print(str1)
    str2 = "Let's go"
    print(str2)
    str3 = '"The Zen of Python"--by Tim Peters'
    print(str3)

    # 练习二 字符串基本操作
    str4 = 'xyz'
    str5 = 'abc'

    # 2.对两个字符串进行连接用+
    print(str4 + str5)

    # 3.取出xyz字符串的第二个和第三个元素
    print(str4[1])
    print(str4[2])

    # 4.对abc输出10次
    print(str5 * 10)

    # 5.判断a字符(串)在 xyz 和 abc 两个字符串中是否存在,并进行输出
    print('a' in str4)
    print('a' in str5)

    #练习三 列表的基本操作
    # 1.定义一个含有5个数字的列表
    list1 = [1,2,3,4,5]
    print(list1)

    # 2.为列表增加一个元素 100
    list1.append(100)
    print(list1)

    # 3.使用remove()删除一个元素后观察列表的变化
    list1.remove(1)
    print(list1)

    # 4.使用切片操作分别取出列表的前三个元素,取出列表的最后一个元素
    print(list1[0:3])
    print(list1[-1])

    # 练习四 元组的基本操作
    # 1.定义一个任意元组,对元组使用append() 查看错误信息
    tuple1 = ('a',1,2,'w',11)
    # tuple1.append(111)
    # 错误信息:AttributeError: 'tuple' object has no attribute 'append'

    # 2.访问元组中的倒数第二个元素
    print(tuple1[-2])

    # 3.定义一个新的元组,和 1. 的元组连接成一个新的元组
    tuple2 = ('x','y',1,4,6)
    print(tuple1 + tuple2)

    # 4.计算元组元素个数
    print(len(tuple1 + tuple2))
    展开

    作者回复: 很好,加油。

    2
    1
  • 2018-06-07
    序列作业中:自定义一个元组,对元组使用append()查看错误信息。不太清楚怎么做了 这个append不是添加元素用的吗,

    作者回复: 元组是不可变的,作业的目的是让大家对报错信息和元组功能要牢牢记住。因此对元组使用append()函数会告诉你没有这个属性,例如执行(1, 2, 3).append(4)就会产生响应的错误提示了

    1
  • 2019-05-11
    老师,在之前评论里面看到的方法。请问是这样的吗?

    chinese_zodiac='鼠牛虎兔龙马羊猴鸡狗猪'
    print (chinese_zodiac[0:4])
    x1,x2,x3,*x4=chinese_zodiac
    print([x1,x3])
    结果:
    鼠牛虎兔
    ['鼠', '虎']

    Process finished with exit code 0

    展开

    作者回复: 是的, 关于可变长参数参考:https://docs.python.org/zh-cn/3.6/tutorial/controlflow.html#default-argument-values

  • 2019-04-12
    老师,您好。
    请教一下元组的课后练习题中,
    # 2. 访问元组中的倒数第二个元素
    tuple1 = ('This','is','极客时间','Welcome')
    如果print(tuple1[-2:-1])
    为什么结果会是('极客时间',)呢?
    即,为什么带了引号,并且会将,也带出呢?
    谢谢!
    展开

    作者回复: 带了, 才是tuple格式,如果不带就变成了字符串了,如:
    print(type(('极客时间')))
    print(type(('极客时间',)))

    输出结果是:
    <class 'str'>
    <class 'tuple'>

  • 2019-04-03
    老师讲的编程思路,联系生活,在生活中如何解决,再去想编程步骤。这个思路是在《因计算机而强大》里面看到的吗!

    作者回复: 学会思考问题很重要,培养编程思路,培养良好的代码书写习惯。

  • 2019-03-14
    零基础,文科宝宝开始学Python了!加油!

    作者回复: 文科也不用有负担,多写多练入门不难

  • 2019-03-12
    按照这个逻辑,字典也算序列吧?

    作者回复: 字典属于映射(mappings)类型,不属于序列类型。
    参考官方文档:
    The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions.
    -- 来源 :https://docs.python.org/3.6/library/stdtypes.html
    序列顾名思义,是按照顺序存储的类型,而字典是映射的类型,是“无序”的。顺序的数据可以做索引和切片操作,这些都不是映射类型的主要功能和特点。
    作为学习可以试试将对序列的操作应用在映射上,看看报错信息加深印象。

  • 2019-03-11
    老师好,根据老师的步骤操作,出现:SyntaxError: can't assign to operator,这个要怎么解决呢

    作者回复: 这种错误一版是你把"+""-""*""/"符号定义为对象,考虑到这节课的内容,应该是你的变量名含有"+""-""*""/" 导致出现语法错误,具体原因还是需要看到你的代码才能解答。

  • 2018-11-19
    打卡第3天

    作者回复: 加油

  • 2018-10-31
    追问“天空”的问题。
       麻烦老师能不能把举得2个例子打出来?我在pycharm上,写的总是报错,我注意了标点符号。
       我写的是a=’asdfgh‘
                   x1,x2,x3,x4=a
                   print(a[x1,x3])

    错误提示是:ValueError: too many values to unpack (expected 4)

    谢谢
    展开

    作者回复: 这里有两个问题需要重新掌握一下,首先是报错的这个问题,由于a变量被赋值的字符串有6个字符,而你要把他们分配(unpack)给x1-x4四个变量,计算机也觉得很为难,所以它报错,a有太多的值,无法进行分配,当你的需求是想取第一个和第三个字符时,要明确说明unpack的变量和asdfgh字符串之间的对应关系;可以是x1-x6六个变量即x1,x2,x3,x4,x5,x6=a
    也可以是前三个是确定的变量后面用通配,即
    x1,x2,x3,*x4=a
    注意x4前面的星号键

    第二个问题既然已经unpack了字符串,那么x1和x3就分别代表了第一个和第三个字符,直接拿来用就行,比如print(x1)
    如果需要从a变量做切片可以使用print(a[1])
    不能将他们混在一起使用。

  • 2018-08-02
    Demo1=“HelloPython”
    print (Demo1[0:])
    Demo2 = "Let's go"
    print (Demo 2[0:])
    Demo3= “The Zen of Python ”
    print (Demo3 [0:])
    展开
  • 2018-06-23
    老师,您提供的源码下载地址,我这下载特慢,而且经常连接不上,您能提供个国内的地址吗?比如百度云上?