python基础篇

  • 第 二 章 编程基础概念(二)
    • 字符串的基本特点
    • 字符串的编码
    • 引号创建字符串
    • 空字符串和len()函数
    • 转义字符
    • 字符串拼接
    • 字符串复制
    • 不换行打印
    • 从控制台读取字符串
    • str()实现数字转型字符串
    • 使用[] 提取字符
    • replace() 实现字符串替换
    • 字符串切片slice操作
    • split()分割和join()合并
    • 字符串驻留机制和字符串比较
    • 字符串比较和同一性
    • 成员操作符
    • 字符串常用方法汇总
      • 常用的查找方法
      • 去掉首尾信息
      • 大小写转换
      • 格式排版
      • 其他方法
    • 字符串格式化
      • 填充和对齐
      • 数字格式化
    • 可变字符串

第 二 章 编程基础概念(二)

字符串的基本特点

很多人初学编程时,总是担心自己数学不行,潜意识里认为数学好才能编程。实际上, 大多数程序员打交道最多的是“字符串”而不是“数字”。因为,编程是用来解决现实问题 的,因此逻辑思维的重要性远远超过数学能力。

字符串的本质是:字符序列。Python的字符串是不可变的,我们无法对原字符串做任 何修改。但,可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。

Python不支持单字符类型,单字符也是作为一个字符串使用的。

字符串的编码

Python3直接支持 Unicode,可以表示世界上任何书面语言的字符。Python3的字符 默认就是 16位Unicode 编码,ASCII 码是Unicode 编码的子集。

  • 使用内置函数 ord()可以把字符转换成对应的Unicode 码
  • 使用内置函数 chr()可以把十进制数字转换成对应的字符
>>> ord('A')
65
>>> chr(66)
'B'

引号创建字符串

我们可以通过单引号或双引号创建字符串。例如:a=’abc’; b=”sxt”

使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字符。例如:

>>> a = "I'm a superman!"
>>> print(a)
I'm a superman! >>> b = 'my_name is "shy-2"'
>>> print(b)
my_name is "shy-2"

连续三个单引号或三个双引号,可以帮助我们创建多行字符串。
例如:

 >>> result = ''' name="shy-2"
company="XXX"
age=18
lover="Tom"'''
>>> print(result)
name="shy-2"
company="XXX"
age=18
lover="Tom"

空字符串和len()函数

Python允许空字符串的存在,不包含任何字符且长度为0。例如:

>>>c = ''
>>>len(c)
0

len()用于计算字符串含有多少字符。例如:

>>> d = 'abc'
>>> len(d)
3

转义字符

我们可以使用“\ +特殊字符”,实现某些难以用字符表示的效果。比如:换行等。常见的 转义字符有这些:

【操作】测试转义字符的使用

>>> a = 'I\nam\nshy-2'
>>> a
'I\nam\nshy-2'
>>> print(a)
I
am
shy-2
>>> print('aaabb\
... ccc')
aaabbccc

字符串拼接

  1. 可以使用+将多个字符串拼接起来。
    例如:’aa’+ ’bb’ ==>’aabb’

     (1) 如果+两边都是字符串,则拼接。 (2) 如果+两边都是数字,则加法运算。(3) 如果+两边类型不同,则抛出异常。
    
  2. 可以将多个字面字符串直接放到一起实现拼接。
    例如:’aa’’bb’==>’aabb’

【操作】字符串拼接操作

>>> a = 'shy-2'+ 'xixi'
>>> a
'shy-2xixi'
>>> b = 'shy-2''xixi'
>>> b
'shy-2xixi'

字符串复制

使用*可以实现字符串复制

【操作】字符串复制操作

>>> a = 'shy-2'*3
>>> a
'shy-2shy-2shy-2'

不换行打印

我们前面调用print 时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行 符。我们可以自己通过参数 end = “任意字符串”,实现末尾添加任何内容。

print("sxt",end=' ')
print("sxt",end='##')
print("sxt")#运行结果
sxt sxt##sxt

从控制台读取字符串

我们可以使用 input()从控制台读取键盘输入的内容。

>>> myname = input("请输入名字:")
请输入名字:shy-2
>>> myname
'shy-2'

str()实现数字转型字符串

str()可以帮助我们将其他数据类型转换为字符串。例如:

str(5.20) = = > ‘5.20’
str(3.14e2) = = > ’314.0’
str(True) = = > ‘True’

当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转成了字符串。

使用[] 提取字符

字符串的本质就是字符序列,我们可以通过在字符串后面添加[ ],在[ ]里面指定偏移量, 可以提取该位置的单个字符。

  • 正向搜索: 最左侧第一个字符,偏移量是 0,第二个偏移量是 1,以此类推。直到 len(str)-1 为止。
  • 反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str) 为止。

【操作】使用[ ] 提取字符串中的字符

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
'a'
>>> a[26-1]
'z'
>>> a[-1]
'z'

replace() 实现字符串替换

字符串是“不可改变”的,我们通过 [ ] 可以获取字符串指定位置的字符,但是我们不能改变字符串。我们尝试改变字符串中某个字符,发现报错了:

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[4] = 's'
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符串来实现。

>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('d','s')
>>> a
'abcsefghijklmnopqrstuvwxyz'

整个过程中,实际上我们是创建了新的字符串对象,并指向了变量a,而不是修改了以前的 字符串。 内存图如下:

字符串切片slice操作

切片 slice 操作可以让我们快速的提取子字符串。标准格式为:
[起始偏移量start:终止偏移量end:步长 step]

  • 典型操作(三个量为正数的情况)如下:
  • 其他操作(三个量为负数)的情况:

    切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始 偏移量小于0则会当做 0,终止偏移量大于“长度-1”会被当成-1。例如:
>>> "abcdefg"[3:50]
'defg'

split()分割和join()合并

split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:

>>> a = 'to be number one'
>>> a.split()
['to', 'be', 'number', 'one']
>>> a.split("be")
['to ', ' num', 'r one']

join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:

>>> a = ['shy-2','i','i']
>>> "x".join(a)
'shy-2xixi'

拼接字符串要点:

使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐 使用join 函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象。

【操作】测试+拼接符和 join(),不同的效率

字符串驻留机制和字符串比较

字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。

>>> a = 'abd_123'
>>> b = 'abd_123'
>>> a is b
True
>>> c = 'aa#'
>>> d = 'aa#'
>>> c is d
False
>>> str1 = 'aa'
>>> str2 = 'bb'
>>> str1 + str2 is 'aabb'
False
>>> str1 + str2 == 'aabb'
True

字符串比较和同一性

我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。

我们使用is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是 否和 id(obj2)相等

成员操作符

in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。

>>> a = "shy-2"
>>> "y" in a
True
>>> "s" not in a
False

字符串常用方法汇总

字符串有很多常用的方法,我们需要熟悉。

常用的查找方法

我们以一段文本作为测试:

a = ‘’‘我是shy-2,是一名编程爱好者, … 我会一直在CSDN上分享我的学习心得, … 希望大家多多支持’’’


>>> len(a)
46
>>> a.startswith("我是shy-2")
True
>>> a.endswith("支持")
True
>>> a.find("2")
6
>>> a.rfind("我")
30
>>> a.count("多")
2
>>> a.isalnum()
False

去掉首尾信息

我们可以通过 strip()去除字符串首尾指定信息。通过 lstrip()去除字符串左边指定信息, rstrip()去除字符串右边指定信息。

【操作】去掉字符串首尾信息

>>> "*shy*-*2*".strip("*")
'shy*-*2'
>>> "  shy  ".strip()
'shy'
>>> "*shy*-*2*".lstrip("*")
'shy*-*2*'
>>> "*shy*-*2*".rstrip("*")
'*shy*-*2'

大小写转换

编程中关于字符串大小写转换的情况,经常遇到。下面列出有关大小写转换的方法:


格式排版

center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下:

>>> a = "shy-2"
>>> a.center(10,"*")
'**shy-2***'
>>> a.center(10)
'  shy-2   '
>>> a.ljust(10,"*")
'shy-2*****'

其他方法

  1. isalnum() 是否为字母或数字
  2. isalpha() 检测字符串是否只由字母组成(含汉字)。
  3. isdigit() 检测字符串是否只由数字组成。
  4. isspace() 检测是否为空白符
  5. isupper() 是否为大写字母
  6. islower() 是否为小写字母

字符串格式化

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的 功能。

基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。

【操作】练习字符串格式化

>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("shy-2",18)
'名字是:shy-2,年龄是:18'>>> b = "名字是{name},年龄是{age}"
>>> b.format(age=18,name="shy-2")
'名字是shy-2,年龄是18'

我们可以通过{索引}/{参数名},直接映射参数值,实现对字符串的格式化,非常方便。

填充和对齐

填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

>>> "{:*>8}".format("shy-2")
'***shy-2'
>>>
>>> "我是{0},我喜欢{1:*^8}".format("shy-2","XXX")
'我是shy-2,我喜欢**XXX***'

数字格式化

浮点数通过f,整数通过d进行需要的格式化。案例如下:

可变字符串

在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,我们有时确实需要原地修改字符串,可以使用 io.StringIO 对象或array 模块。

import ios = "hello,shy-2"
sio = io.StringIO(s)
print(sio)
#输出结果:<_io.StringIO object at 0x000001D356D63D38>print(sio.getvalue())
#输出结果:hello,shy-2sio.seek(7)
sio.write("g")
print(sio.getvalue())#输出结果:hello,sgy-2

python从零基础直达神经网络之基础篇 第二章 编程基础概念(二)相关推荐

  1. python字符串逆向垂直输出型烟雾机_第二章 灯光基础知识

    第二章灯光基础知识 舞台灯光简介 舞台灯光是演出空间构成的重要组成部分.是根据情节的发展对人物以及所需的特定场景进行全方位的视觉环境的灯光设计,并有目的将设计意图以视觉形象的方式再现给观众的艺术创作. ...

  2. PTA-MOOC《Python程序设计浙江大学》拼题A题目集第二章编程题

    7-1 计算 11+12+13+-+m (30分) 输入一个正整数m(20<=m<=100),计算 11+12+13+-+m 的值. 输入格式: 在一行输入一个正整数m. 输出格式: 在一 ...

  3. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记4:第二章 NumPy基础3——数组的组合、分割,数组转换为列表

    第二章 NumPy基础3 本章示例代码中的输入和输出均来自IPython会话. 2.7 数组的组合 NumPy数组有水平组合.垂直组合和深度组合等多种组合方式,我们将使用vstack.dstack. ...

  4. 《机器学习系列教程》:第二章 机器学习基础

    第二章 机器学习基础 机器学习and 数据分析 2.2 监督学习.非监督学习.半监督学习.弱监督学习? 根据数据类型的不同,对一个问题的建模有不同的方式.依据不同的学习方式和输入数据,机器学习主要分为 ...

  5. 深度学习 - 第二章 - 机器学习基础

    深度学习 - 第二章 - 机器学习基础 第二章 机器学习基础 2.1 各种常见算法图示 2.2 监督学习.非监督学习.半监督学习.弱监督学习? 2.3 监督学习有哪些步骤 2.4 多实例学习? 2.5 ...

  6. pandas 第二章 pandas基础

    第二章 pandas基础 import numpy as np import pandas as pd import xlrd 在开始学习前,请保证pandas的版本号不低于如下所示的版本,否则请务必 ...

  7. 计算机系统组成及工作原理PPT,第二章 计算机基础知识 2.1 计算机系统的组成与工作原理 2.2 数制转换及运算 2.3 数据在计算机中的表示....

    Presentation on theme: "第二章 计算机基础知识 2.1 计算机系统的组成与工作原理 2.2 数制转换及运算 2.3 数据在计算机中的表示."- Presen ...

  8. 数字图像处理 第二章数字图像基础

    第二章 数字图像基础 本章全都不是重点,了解就好 目标 人体视觉感知 光和电磁波谱 成像模型 图像取样与量化 一些基本概念和数学处理方法 人体视觉感知 人眼结构 上图为人眼剖面图. 人眼是一个直径约为 ...

  9. 鸟哥的Linux私房菜(服务器)- 第二章、基础网络概念

    第二章.基础网络概念 最近更新日期:2011/07/15 你的服务器是放在网络网络上面来提供服务的,所以,如果没有网络或者是网络不通,那么你的服务器当然是英雄无用武之地啦! 此外,服务器上面的网络服务 ...

  10. Linux基础篇--shell脚本编程基础

    Linux基础篇–shell脚本编程基础 本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为 ...

最新文章

  1. java中的静态变量的作用域_Java基础学习03-变量、常量、作用域
  2. leetcode 1004. 最大连续1的个数 III(滑动窗口)
  3. is在python中是什么意思_Python 中 is 与 == 有啥区别?
  4. transform用于图像检索
  5. python将csv文件拆分_在python中将一个csv拆分为多个文件
  6. java可以实现agv调度吗_AGV路线优化及实时调度
  7. 判断字符串中是否包含指定字符的N种方法对比
  8. Telerik for AJAX RadGrid控件
  9. python接口自动化 post请求,body 带headers参数
  10. iOS.UIKit.07.UIAlertView_UIActionSheet
  11. windows运行中自定义命令创建/自定义bat文件创建
  12. Convex functions
  13. SOJ-4484-后缀数组
  14. html和css中盒子大小,CSS大小设置实例——盒子模型
  15. 计算机毕业设计选题建议
  16. (十二)系统集成中级-质量管理
  17. 操作系统单内核和微内核的区别
  18. 江苏工匠杯_unseping_wp
  19. 服务器信号满格但网速很慢,4G信号满格网速却很慢?一招搞定!
  20. python输出100以内偶数_Python求取100以内的所有偶数和奇数以及和

热门文章

  1. GIS-坐标系-EPSG(二次整理)
  2. linux的cpu使用率100%?
  3. 【英文演讲】(运动的重要性)Importance of Sports
  4. bit、Byte、KB、MB、GB互相转换的关系
  5. 测试ips显示器的软件,IPS屏幕显示测试
  6. openfoam学习心得---牛顿流体相关公式理解、转换与整理
  7. 利用Tukey方法识别离群值
  8. 冯扬文:基于数据仓库的集装箱运价信息集成研究
  9. Grounded video description
  10. 小白也能学引流技巧:如何利用微信群找到你的精准用户| 二维彩虹二维码生成器