`
webcode
  • 浏览: 6079977 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

python学习(第三章)

 
阅读更多

使用字符串

基本字符串操作

  • 所有标准的字符串操作(索引、分片、乘法、判断成员资格、求长度、取最大值和最小值)对字符串同样适用。但是,请记住字符串都是不变的

    >>>website = 'http://www.python.org'
    >>>website[-3: ] = 'com'
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'str' object does not support item assignment
    

字符串格式化: 精简版

  • 字符串格式化使用字符串格式化操作符即百分号%来实现
  • 在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。一般情况下使用元组:

    >>>format = "Hello, %s. %s enough for ya?"
    >>>values = ('world', 'Hot')
    >>>print format %s values
    Hello, world. Hot enough for ya?
    

    [注: 如果使用列表或其他序列代替元组,那么序列就会被解释为一个值。只有元组和和字典可以格式化一个以上的值]

  • %s中的s表示会被格式化为字符串--如果不是字符串,则会用str将其转换为字符串。

    [注: 如果要在格式化字符串里面包含百分号,那么必须使用%%]

  • 如果要格式化实数(浮点数),可以使用f说明符类型,同时提供所需要的精度: 一个句点在加上希望保留的小数位数.

    >>>format = "Pi with three decimals: %.3f"
    >>>from math import pi
    >>>print format % pi
    Pi with three decimals: 3.142
    

模板字符串
string模板提供另外一种格式化值的方法: 模板字符串。

>>>from string import Template
>>>s = Template('$x, glorious $x!')
>>>s.substitute(x = 'slurm')
'slurm, glorious slurm'

如果替换字段是单词的一部分,那么参数名就必须用括号括起来,从而准确指明结尾

>>>from string import Template
>>>s = Template("It's ${x}tastic!")
>>>s.substitute(x = 'slurm')
"It's slurmtastic!"

可以使用$$插入美元符号

>>>from sting import Template
>>>s = Template("Make $$ selling $x!")
>>>s.substitute(x = 'slurm')
'Make $ selling slurm!'

除了关键字参数之外,还可以使用字典变量提供值/名称对

>>>s = Template('A $thing must never $action.')
>>>d = {}
>>>d['thing'] = 'gentleman'
>>>d['action'] = 'show his socks'
>>>s.substitue(d)
'A gentleman must never show his socks.'

字符串格式化: 完整版

  • 格式化操作符的有操作数可以是任何东西,如果是元组或映射类型(如字典),那么字符串格式化将会有所不同
  • 如果有操作数是元组,则其中的每一个元素会被单独格式化,每个值都需要一个对应的转换说明符

注: 如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免错误。

>>>'%s plus %s equals %s' % (1, 1, 2)
'1 plus 1 equals 2'
>>>'%s plus %s equals %s' % 1, 1, 2# Lacks parentheses!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

  • 基本的转换说明符包括以下部分。

    1. %字符: 标记转换说明符的开始
    2. 转换标志(可选): -表示左对齐; +表示在转换值之前要加上正负号; ""(空白字符)表示正数之前保留空格; 0表示转换值若位数不够则用0填充
    3. 最小字段宽度(可选): 转换后的字符串至少应该具有该值指定的宽度。如果是"""",则宽度会从值元组中读出
    4. 点(.)后跟精度值(可选): 如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就是表示最大字段宽度。如果是"*",那么精度将会从元组中读出
    5. 转换类型转换类型 & 含义\d, i & 带符号的十进制整数\o & 不带符号的八进制\u & 不带符号的十进制\x & 不带符号的十六进制\X & 不带符号的十六进制\e & 科学计数法表示浮点数\E & 科学计数法表示浮点数\f, F & 十进制浮点数\g & 如果指数大于-4或者小于精度值则和e相同,其他情况与f相同\G & 如果指数大于-4或者小于精度值则和E相同,其他情况与F相同\c & 单字符\r & 字符串(使用repr转换任意python对象)\s & 字符串(使用str转换任意python对象)\

简单转换

>>>'Price of eggs: $%d' % 42
'Price of eggs: $42'
>>>'Hexadecimal price of eggs: %x' % 42
'Hexadecimal price of eggs: 2a'
>>>from math import pi
>>>'Pi: %f...' % pi
'Pi: 3.141593...'
>>>'Very inexact estimate of pi: %i' % pi
'Very inexact estimate of pi: 3'
>>>'Using str: %s' % 42L
'Using str: 42'
>>>'Using repr: %r' % 42L
'Using repr: 42L'

字段宽度和精度

>>>from math import pi
>>>'%10lf' % pi # 字段宽 10
' 3.141593'
>>>'%10.2lf' % pi # 字段宽 10, 精度 2
' 3.14'
>>>'%.2lf' % pi # 精度 2
'3.14'
>>>'%.*5s' % 'Guido van Rossum' # 字符串宽度 5
'Guido'
>>>'%.*s' % (5, 'Guido van Rossum') # 字符串宽度 5
'Guido'

符号、对齐和0填充

  • 在字段宽度和精度值之前还可以放置一个"标表",该标表可以是零、减号或空格。
  • 零表示数字会用0进行填充

    >>>from math import pi
    >>>'%010.2lf' % pi
    '0000003.14'
    
  • 减号(-)用来左对齐数值:

    >>>form math import pi
    >>>'%-10.2lf' % pi
    '3.14 '
    
  • 空白(" ")意味着在正数前加空格

    >>>print ('% 5d' % 10) + '\n' + ('% 5d' % -10)
    10
    -10
    
  • 加号(+)表示不管是正数还是负数都标示出符号

    >>>print ("%+5d' % 10) + '\n' + ('%+5d' % -10)
    +10
    -10
    
  • 示例3-1


 # 使用给定的宽度打印格式化后的价格列表
width = input('Please enter width')
price_width = 10
item_width = width - price_width
header_format = '%-*s%*s'
body_format = '%-*s*s.2f'
print '=' * width
print header_format % (item_width, 'Item', 'price_width, 'Price')
print '-' * width
print body_format % (item_width, 'Apples', price_width, 0.4)
print body_format % (item_width, 'Pears', price_width, 0.5)
print '=' * width


 $./3-1.py
Please enter width: 80
================================================================================
Item Price
--------------------------------------------------------------------------------
Apples 0.40
Pears 0.50
================================================================================

字符串方法

find

  • find方法可以在一个较长的字符串查找子字符串。它返回子串所在位置的最左端索引,如果没有找到返回-1

    >>>'With a moo-moo here. and moo-moo there'.find('moo')
    7
    >>>title = "Monty Python's Flying Circus"
    >>>title.find('Monty')
    0
    >>>title.find('Python')
    6
    >>>title.find('Zirquss')
    -1
    
  • 这个方法还可以接受可选的起始点和结束点参数:

    >>>subject = '$$$ Get rich now!!! $$$'
    >>>subject.find('$$$')
    0
    >>>subject.find('$$$', 1) # 只提供起始点
    20
    >>>subject.find('!!!')
    16
    >>>subject.find('!!!', 0, 16) # 提供起始点和结束点
    -1
    

join

  • join方法是非常重要的字符串方法,它是split方法的逆方法

    >>>seq = [1, 2, 3, 4, 5]
    >>>'+'.join(seq)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: sequence item 0: expected string, int found
    >>>seq = ['1', '2', '3', '4', '5']
    >>>'+'.join(seq)
    '1+2+3+4+5'
    >>>dirs = '', 'usr', 'bin', 'env'
    >>>'/'.join(dirs)
    '/usr/bin/env'
    

    需要添加的队列元素都必须是字符串

lower

  • lower方法返回字符串的消协字母版

    >>>'Trondheim Hammer Dance'.lower()
    'trondheim hammer dance'
    

replace

  • replace方法返回某字符串的所有匹配项均被替换之后得到字符串

    >>>'This is a test'.replace('is', 'eez')
    'Theez eez a test'
    

split

  • 它是join的逆方法,用来将字符串分割成序列

    >>>'1+2+3+4+5'.split('+')
    ['1', '2', '3', '4', '5']
    >>>'/usr/bin/env'.split('/')
    ['usr', 'bin', 'env']
    
  • strip方法返回取出两侧(不包括内部)空格的字符串

    >>>' internal whitespace is kept '.strip()
    'internal whitespace is kept'
    
  • 也可以指定需要去除的字符,将它们列为参数即可

    >>>'***SPAM * for * everyone!!! ***'.strip(' *!')
    'SPAM * for * everyone'
    

translate

  • translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有些时候比replace效率高得多

  • 在使用translate转换之前,需要先完成一张转换表。转换表中是以某字符替换某字符的对应关系

  • maketrans函数接受两个参数: 两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。

    >>>from string import maketrans
    >>>table = maketrans('cs', 'kz')
    

使用字符串

基本字符串操作

  • 所有标准的字符串操作(索引、分片、乘法、判断成员资格、求长度、取最大值和最小值)对字符串同样适用。但是,请记住字符串都是不变的

    >>>website = 'http://www.python.org'
    >>>website[-3: ] = 'com'
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'str' object does not support item assignment
    

字符串格式化: 精简版

  • 字符串格式化使用字符串格式化操作符即百分号%来实现
  • 在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。一般情况下使用元组:

    >>>format = "Hello, %s. %s enough for ya?"
    >>>values = ('world', 'Hot')
    >>>print format %s values
    Hello, world. Hot enough for ya?
    

    [注: 如果使用列表或其他序列代替元组,那么序列就会被解释为一个值。只有元组和和字典可以格式化一个以上的值]

  • %s中的s表示会被格式化为字符串--如果不是字符串,则会用str将其转换为字符串。

    [注: 如果要在格式化字符串里面包含百分号,那么必须使用%%]

  • 如果要格式化实数(浮点数),可以使用f说明符类型,同时提供所需要的精度: 一个句点在加上希望保留的小数位数.

    >>>format = "Pi with three decimals: %.3f"
    >>>from math import pi
    >>>print format % pi
    Pi with three decimals: 3.142
    

模板字符串
string模板提供另外一种格式化值的方法: 模板字符串。

>>>from string import Template
>>>s = Template('$x, glorious $x!')
>>>s.substitute(x = 'slurm')
'slurm, glorious slurm'

如果替换字段是单词的一部分,那么参数名就必须用括号括起来,从而准确指明结尾

>>>from string import Template
>>>s = Template("It's ${x}tastic!")
>>>s.substitute(x = 'slurm')
"It's slurmtastic!"

可以使用$$插入美元符号

>>>from sting import Template
>>>s = Template("Make $$ selling $x!")
>>>s.substitute(x = 'slurm')
'Make $ selling slurm!'

除了关键字参数之外,还可以使用字典变量提供值/名称对

>>>s = Template('A $thing must never $action.')
>>>d = {}
>>>d['thing'] = 'gentleman'
>>>d['action'] = 'show his socks'
>>>s.substitue(d)
'A gentleman must never show his socks.'

字符串格式化: 完整版

  • 格式化操作符的有操作数可以是任何东西,如果是元组或映射类型(如字典),那么字符串格式化将会有所不同
  • 如果有操作数是元组,则其中的每一个元素会被单独格式化,每个值都需要一个对应的转换说明符

注: 如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免错误。

>>>'%s plus %s equals %s' % (1, 1, 2)
'1 plus 1 equals 2'
>>>'%s plus %s equals %s' % 1, 1, 2# Lacks parentheses!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

  • 基本的转换说明符包括以下部分。

    1. %字符: 标记转换说明符的开始
    2. 转换标志(可选): -表示左对齐; +表示在转换值之前要加上正负号; ""(空白字符)表示正数之前保留空格; 0表示转换值若位数不够则用0填充
    3. 最小字段宽度(可选): 转换后的字符串至少应该具有该值指定的宽度。如果是"""",则宽度会从值元组中读出
    4. 点(.)后跟精度值(可选): 如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就是表示最大字段宽度。如果是"*",那么精度将会从元组中读出
    5. 转换类型转换类型 & 含义\d, i & 带符号的十进制整数\o & 不带符号的八进制\u & 不带符号的十进制\x & 不带符号的十六进制\X & 不带符号的十六进制\e & 科学计数法表示浮点数\E & 科学计数法表示浮点数\f, F & 十进制浮点数\g & 如果指数大于-4或者小于精度值则和e相同,其他情况与f相同\G & 如果指数大于-4或者小于精度值则和E相同,其他情况与F相同\c & 单字符\r & 字符串(使用repr转换任意python对象)\s & 字符串(使用str转换任意python对象)\

简单转换

>>>'Price of eggs: $%d' % 42
'Price of eggs: $42'
>>>'Hexadecimal price of eggs: %x' % 42
'Hexadecimal price of eggs: 2a'
>>>from math import pi
>>>'Pi: %f...' % pi
'Pi: 3.141593...'
>>>'Very inexact estimate of pi: %i' % pi
'Very inexact estimate of pi: 3'
>>>'Using str: %s' % 42L
'Using str: 42'
>>>'Using repr: %r' % 42L
'Using repr: 42L'

字段宽度和精度

>>>from math import pi
>>>'%10lf' % pi # 字段宽 10
' 3.141593'
>>>'%10.2lf' % pi # 字段宽 10, 精度 2
' 3.14'
>>>'%.2lf' % pi # 精度 2
'3.14'
>>>'%.*5s' % 'Guido van Rossum' # 字符串宽度 5
'Guido'
>>>'%.*s' % (5, 'Guido van Rossum') # 字符串宽度 5
'Guido'

符号、对齐和0填充

  • 在字段宽度和精度值之前还可以放置一个"标表",该标表可以是零、减号或空格。
  • 零表示数字会用0进行填充

    >>>from math import pi
    >>>'%010.2lf' % pi
    '0000003.14'
    
  • 减号(-)用来左对齐数值:

    >>>form math import pi
    >>>'%-10.2lf' % pi
    '3.14 '
    
  • 空白(" ")意味着在正数前加空格

    >>>print ('% 5d' % 10) + '\n' + ('% 5d' % -10)
    10
    -10
    
  • 加号(+)表示不管是正数还是负数都标示出符号

    >>>print ("%+5d' % 10) + '\n' + ('%+5d' % -10)
    +10
    -10
    
  • 示例3-1


 # 使用给定的宽度打印格式化后的价格列表
width = input('Please enter width')
price_width = 10
item_width = width - price_width
header_format = '%-*s%*s'
body_format = '%-*s*s.2f'
print '=' * width
print header_format % (item_width, 'Item', 'price_width, 'Price')
print '-' * width
print body_format % (item_width, 'Apples', price_width, 0.4)
print body_format % (item_width, 'Pears', price_width, 0.5)
print '=' * width


 $./3-1.py
Please enter width: 80
================================================================================
Item Price
--------------------------------------------------------------------------------
Apples 0.40
Pears 0.50
================================================================================

字符串方法

find

  • find方法可以在一个较长的字符串查找子字符串。它返回子串所在位置的最左端索引,如果没有找到返回-1

    >>>'With a moo-moo here. and moo-moo there'.find('moo')
    7
    >>>title = "Monty Python's Flying Circus"
    >>>title.find('Monty')
    0
    >>>title.find('Python')
    6
    >>>title.find('Zirquss')
    -1
    
  • 这个方法还可以接受可选的起始点和结束点参数:

    >>>subject = '$$$ Get rich now!!! $$$'
    >>>subject.find('$$$')
    0
    >>>subject.find('$$$', 1) # 只提供起始点
    20
    >>>subject.find('!!!')
    16
    >>>subject.find('!!!', 0, 16) # 提供起始点和结束点
    -1
    

join

  • join方法是非常重要的字符串方法,它是split方法的逆方法

    >>>seq = [1, 2, 3, 4, 5]
    >>>'+'.join(seq)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: sequence item 0: expected string, int found
    >>>seq = ['1', '2', '3', '4', '5']
    >>>'+'.join(seq)
    '1+2+3+4+5'
    >>>dirs = '', 'usr', 'bin', 'env'
    >>>'/'.join(dirs)
    '/usr/bin/env'
    

    需要添加的队列元素都必须是字符串

lower

  • lower方法返回字符串的消协字母版

    >>>'Trondheim Hammer Dance'.lower()
    'trondheim hammer dance'
    

replace

  • replace方法返回某字符串的所有匹配项均被替换之后得到字符串

    >>>'This is a test'.replace('is', 'eez')
    'Theez eez a test'
    

split

  • 它是join的逆方法,用来将字符串分割成序列

    >>>'1+2+3+4+5'.split('+')
    ['1', '2', '3', '4', '5']
    >>>'/usr/bin/env'.split('/')
    ['usr', 'bin', 'env']
    
  • strip方法返回取出两侧(不包括内部)空格的字符串

    >>>' internal whitespace is kept '.strip()
    'internal whitespace is kept'
    
  • 也可以指定需要去除的字符,将它们列为参数即可

    >>>'***SPAM * for * everyone!!! ***'.strip(' *!')
    'SPAM * for * everyone'
    

translate

  • translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有些时候比replace效率高得多

  • 在使用translate转换之前,需要先完成一张转换表。转换表中是以某字符替换某字符的对应关系

  • maketrans函数接受两个参数: 两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。

    >>>from string import maketrans
    >>>table = maketrans('cs', 'kz')
    
分享到:
评论

相关推荐

    机器学习实战+python3 第三章 决策树

    使用python3版本修改机器学习实战中python2的代码

    清华大学精品Python学习PPT课件-第3章 Python流程控制.pptx

    清华大学精品Python学习PPT课件-第3章 Python流程控制.pptx 清华大学精品Python学习PPT课件-第4章 Python组合数据类型.pptx 清华大学精品Python学习PPT课件-第5章 Python正则表达式.pptx 清华大学精品Python学习PPT...

    清华大学精品Python学习PPT课件-第11章 Python项目实战:爬虫程序.pptx

    清华大学精品Python学习PPT课件-第3章 Python流程控制.pptx 清华大学精品Python学习PPT课件-第4章 Python组合数据类型.pptx 清华大学精品Python学习PPT课件-第5章 Python正则表达式.pptx 清华大学精品Python学习PPT...

    疯狂Python讲义第三章课后习题

    《疯狂Python讲义》是一本深受Python初学者和进阶者喜爱的教材,其第三章主要涉及Python的基础语法和常用编程概念。通过本章的课后习题,读者可以巩固和深化对Python语言的理解,提高实际编程能力。下面将详细解析...

    python入门学习资料

    此文档是python学习的入门文档,文件格式txt可以修改格式为html,方便阅读。 第 1 章 安装 Python 第 2 章 第一个 Python 程序 第 3 章 内置数据类型 第 4 章 自省的威力 第 5 章 对象和面向对象 第 6 章 异常和文件...

    python教程答案第三章-Python基础教程(第三章).pdf

    在Python的基础教程中,第三章主要讲解了字符串操作,这是Python编程中的重要组成部分。下面将详细阐述这一章中的关键知识点。 首先,我们来看字符串的格式化。在Python中,可以通过`%`运算符进行简单的字符串格式...

    算法设计与分析(python)第六章.zip

    在本压缩包“算法设计与分析(python)第六章.zip”中,主要涵盖了关于算法设计与分析的相关内容,特别是使用Python编程语言进行实现。这一章节的学习重点在于理解算法的基本概念、设计方法以及性能分析,同时结合...

    Python程序设计第五章编程题答案(浙江大学)

    本资源包含了"Python程序设计"课程第五章的编程题答案,旨在帮助学生理解和掌握Python编程的核心概念与技巧。 在Python编程中,第五章通常会涵盖一些关键主题,例如函数的使用、模块导入、异常处理、文件操作以及...

    python 零基础学习篇-Python-第三章 使用序列1-12.mp3

    python 零基础学习篇-Python-第三章 使用序列1-12.mp3

    Python数据分析与应用第三章实训2

    在本实践项目“Python数据分析与应用第三章实训2”中,我们将深入探讨Python在数据分析领域的应用,特别是基于黄红梅和张良均合著的《python数据分析与应用》一书。这个实训主要聚焦于使用Python的库进行数据处理、...

    Python数据分析与应用第三章实训1

    在本实践项目“Python数据分析与应用第三章实训1”中,我们将深入探讨Python在数据处理和分析中的应用。黄红梅和张良均所著的《python数据分析与应用》是一本广泛使用的教材,旨在帮助读者掌握Python在数据分析领域...

    清华大学精品Python学习PPT课件-第3章 Python流程控制.rar

    本章节,我们将深入探讨清华大学精品Python学习课程中的“第3章 Python流程控制”所涵盖的知识点。 1. 条件语句 Python中的条件语句包括`if`, `elif`, 和 `else`,用于根据条件执行不同的代码块。例如: ```python ...

    python教程答案第三章-python从入门到实践课后习题第三章.pdf

    【Python 列表操作基础】 ...通过这些练习,学习者可以掌握Python中列表的基本操作,这对于后续编程工作至关重要,因为列表在很多场景下都是处理数据的主要工具。熟悉这些操作能帮助程序员更有效地组织和处理信息。

    Python程序设计第四章编程题答案(浙江大学)

    在本资源中,"Python程序设计第四章编程题答案(浙江大学)" 提供了浙江大学中国大学MOOC Python课程第四章的编程练习解答。这是一份非常实用的学习资料,特别是对于那些正在学习Python编程并希望通过实践来提升技能...

    python 零基础学习篇-Python-第一章 Python入门导入1-3.mp3

    python 零基础学习篇-Python-第一章 Python入门导入1-3.mp3

    Python学习笔记第二版

    根据提供的文档信息,我们可以从中提炼出一系列与Python学习相关的知识点,尤其聚焦于“Python学习笔记第二版”的内容。下面将详细展开这些知识点: ### Python学习笔记第二版 #### 前言 - **作者背景**:作者从...

    Python学习教程(超级详细)中文PDF完整版最新版本

    目录第1章Python编程基础第2章Python初探第3章变量类型和运第4章列表、元组、字典和集合第5章Python字符串常用方法第6章Python 流程控制第7章函数和 lambda表达式第8章Python 类和对象第9章Python异常处理机制第10章...

Global site tag (gtag.js) - Google Analytics