Python Learning Note Day 10

2018-03-30 0 条评论 243 次阅读 2 人点赞

今天是Python学习第十天,今天主要对字符串部分的基础进行了补充。

有设置字符串的格式,以及各种字符串的方法,总之补充了之前学的空白的地方,对字符串的理解更加深刻了。字符串的处理其实很常见,日常很多处理都是在跟字符串打交道,所以这部分的补充很必要。

补充知识:

1. 字符串格式设置,按顺序

strings='{} love {} fyx'
print(strings.format('I','you'))
# 字符串格式设置,按顺序

2. 字符串格式设置,按索引

string="{0} {1} {2} {3} {0} {1}"
print(string.format('to','be','or','not'))
# 字符串格式设置,按索引

3. 用名称来格式化

用冒号:把名称和格式说明符.2f 分开 表示保留两位小数

from math import pi

str="{name} is approximately {value:.2f}."
print(str.format(value=pi, name="π") )
# π is approximately 3.14.
# 用名称来格式化,用冒号:把名称和格式说明符.2f 分开 表示保留两位小数

str="{name} is approximately {value}."
print(str.format(value=pi, name="π") )
# π is approximately 3.141592653589793.

4. format

向format提供要设置其格式的未命名参数,并在格式字符串中使用未命名字段。此时,将按顺序将字段和参数配对。

strings='{} love {} fyx'
print(strings.format('I','you'))

还可通过索引来指定要在哪个字段中使用相应的未命名参数,这样可不按顺序使用未命名参数.

str="{name} is approximately {value}.Do {0} like {1}"
print(str.format('you','it',value=pi, name="π",) )

 

指定要在字段中包含的值后,就可添加有关如何设置其格式的指令了。首先,可以提供一个转换标志!.

from math import pi

print("{pi!s} {pi!r} {pi!a}".format(pi="π"))


上述三个标志(s、r和a)指定分别使用str、repr和ascii进行转换。函数str通常创建外观普通的字符串版本(这里没有对输入字符串做任何处理)。函数repr尝试创建给定值的Python表示(这里是一个字符串字面量)。函数ascii创建只包含ASCII字符的表示,类似于Python 2中的repr。

 

还可指定要转换的值是哪种类型,更准确地说,是要将其视为哪种类型。例如,你可能提供一个整数,但将其作为小数进行处理。为此可在格式说明(即冒号后面)使用字符f(表示定点数)。

print("The number is {num}".format(num=42))
# The number is 42
print("The number is {num:f}".format(num=42))
# The number is 42.000000
print("The number is {num:.3f}".format(num=42))
# The number is 42.000

更多字符:

b   将整数表示为二进制数
c   将整数解读为Unicode码点
d   将整数视为十进制数进行处理,这是整数默认使用的说明符
e   使用科学表示法来表示小数(用e来表示指数)
E   与e相同,但使用E来表示指数
f   将小数表示为定点数
F   与f相同,但对于特殊值(nan和inf),使用大写表示
g   自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数
G   与g相同,但使用大写来表示指数和特殊值
n   与g相同,但插入随区域而异的数字分隔符
o   将整数表示为八进制数
s   保持字符串的格式不变,这是默认用于字符串的说明符
x   将整数表示为十六进制数并使用小写字母
X   与x相同,但使用大写字母
%   将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%)

宽度、精度

# 宽度、精度
print("{num:10}".format(num=3) )
#          3
print("{pi:10.2f}".format(pi=pi) )
#       3.14

千位分隔符

# 千位分隔符
print('Our nation have about {number:,} people'.format(number=100**4*14))

 

符号、对齐和用 0 填充

有很多用于设置数字格式的机制,比如便于打印整齐的表格。在大多数情况下,只需指定宽度和精度,但包含负数后,原本漂亮的输出可能不再漂亮。另外,正如你已看到的,字符串和数的默认对齐方式不同。在一栏中同时包含字符串和数时,你可能想修改默认对齐方式。在指定宽度和精度的数前面,可添加一个标志。这个标志可以是零、加号、减号或空格,其中零表示使用0来填充数字。

length=50
print('❤'*length)
string="❤"*5
string+=' '*(length+25)
string+="❤"*5
print(string)
str='I love Fengyunxia'
strings="❤"*5+' '*ceil((length+25-len(str))/2)\
        +str+' '*ceil((length+25-len(str))/2)+"❤"*5
print(strings)
print(string)
print('❤'*length)

要指定左对齐、右对齐和居中,可分别使用<、>和^

print()
print('❤'*length)
print("{:<}".format('❤'*5)+"{:>80}".format('❤'*5))
# leng=ceil((len(str))/2+5)
# print(leng)
print("{:<}".format('❤'*5)+'{:^75}'.format('I love Fengyunxia')
      +"{:>5}".format('❤'*5))
print("{:<}".format('❤'*5)+"{:>80}".format('❤'*5))
print('❤'*length)
# print()

上面两处代码效果一致。

# 根据指定的宽度打印格式良好的价格列表
width = int(input('Please enter width: '))
price_width = 5
item_width = width - price_width
header_fmt = '{{:{}}}{{:>{}}}'.format(item_width, price_width)
fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width, price_width)
print('=' * width)
print(header_fmt.format('Item', 'Price'))
print('-' * width)
print(fmt.format('Apples', 0.4))
print(fmt.format('Pears', 0.5))
print(fmt.format('Cantaloupes', 1.92))
print(fmt.format('Dried Apricots (16 oz.)', 8))
print(fmt.format('Prunes (4 lbs.)', 12))
print('=' * width)

5. 方法 center
方法center通过在两边添加填充字符(默认为空格)让字符串居中。

# 方法center通过在两边添加填充字符(默认为空格)让字符串居中。
print('*'*39)
print('*'*39)
print('I love fengyunxia'.center(39))
print('I love fengyunxia'.center(39,'*'))
print('*'*39)
print('*'*39)

6. find
方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1。

# 方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1。
str='I love fengyunxia very very much'
print(str.find('v'))
print(str.find('a'))

7. join
join是一个非常重要的字符串方法,其作用与split相反,用于合并序列的元素。

# join是一个非常重要的字符串方法,其作用与split相反,用于合并序列的元素。
lists=['1','2','3','4']
str=''
print(str.join(lists))# 1234
str='-'
print(str.join(lists))# 1-2-3-4

dirs = ['', 'usr', 'bin', 'env']
print('C:'+"\\".join(dirs))

8. replace
方法replace将指定子串都替换为另一个字符串,并返回替换后的结果。( 区分大小写,且全部替换)

# 方法replace将指定子串都替换为另一个字符串,并返回替换后的结果。
# 区分大小写,且全部替换
str='ThIs is a good story and she is a good girl'
print(str.replace('is','was'))

9. split
split是一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分为序列。

# split是一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分为序列。
string='thisisastring'
print(string.split()) # ['thisisastring']
string='this a string'
print(string.split()) # ['this', 'a', 'string']

10. translate
方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换。
这个方法的优势在于能够同时替换多个字符,因此效率比replace高。
然而,使用translate前必须创建一个转换表。这个转换表指出了不同Unicode码点之间的转换关系。要创建转换表,可对字符串类型str调用方法maketrans,这个方法接受两个参数:

两个长度相同的字符串,它们指定要将第一个字符串中的每个字符都替换为第二个字符串中的相应字符。就这个简单的示例而言,代码类似于下面这样:


>> table = str.maketrans('cs', 'kz')


如果愿意,可查看转换表的内容,但你看到的只是Unicode码点之间的映射。


# >>> table
{115: 122, 99: 107}


创建转换表后,就可将其用作方法translate的参数。


>>> 'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'


调用方法maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。例如,要模仿语速极快的德国口音,可将所有的空格都删除。


>>> table = str.maketrans('cs', 'kz', ' ')
>>> 'this is an incredible test'.translate(table)
'thizizaninkredibletezt'


table = str.maketrans('csi', 'kza')
print(table)
print('this is an incredible test'.translate(table))

11. 判断字符串是否满足特定的条件

很多字符串方法都以is打头,如isspace、isdigit和isupper,它们判断字符串是否具有特定的性质(如包含的字符全为空白、数字或大写)。如果字符串具备特定的性质,这些方法就返回True,否则返回False。

附录B:
isalnum、isalpha、isdecimal、isdigit、isidentifier、islower、isnumeric、isprintable、isspace、istitle、isupper。

12.新函数:

函数描述
string.capwords(s[, sep])
使用split根据sep拆分s,将每项的首字母大写,再以空格为分隔符将它们合并起来
ascii(obj)
创建指定对象的ASCII表示

 

周末愉快!

Kiwi

Valar Morghulis

文章评论(0)