python字符串in_Python 学习——字符串

字符串(String)

字符串是一个字符的序列,使用成对的单引号或双引号包裹内容:

str_1 = "Hello world"

str_2 = 'Hello world'

也可以用三引号表示(’’’或”””),用三引号表示字符串可以保留字符串中的全部格式信息:

str_3 = """

this is

a test

today

"""

注:无论是单引号或是双引号,都必须成对出现。不能单独出现。如果在字符串中还存在”或者’则需要使用转义字符:

str_4 = 'hello/'s world'

基本的字符串运算

长度len()函数:

str_5 = "hello world"

print len(str_5)

输出结果

拼接(+)

frist_name = 'xiao'

name = 'ming'

print frist_name + name

输出结果

重复(*)

s = 'hello'

print s * 3

输出结果

成员运算符(in):

判断一个字符串是否是另一个字符串的子串,返回值Ture或者False

s = 'hello'

print 'h' in s

输出结果

也可以利用in判断字符串是否是另一个字符串的子串,Python是大小写敏感的语言,所以只有大小写一致的话才可以返回Ture。

for语句遍历字符串

作用:枚举字符串的 每个字符。

s = 'hello'

for chr in s:

print chr

运行结果

案例

编写一个函数,计算一个字符串中元音字母的数目。(元音字母aeiou或者AEIOU)

def vowels_count(s):

count = 0

for chr in s:

if chr in 'aeiouAEIOU':

count += 1

return count

print vowels_count('hello world')

输出结果:

字符串索引

字符串中每个字符都有一个索引值(下标),索引从0(前向)或-1(后向)开始

froward index

0

1

2

3

4

h

e

l

l

o

backward index

-5

-4

-3

-2

-1

索引运算符 [ ]

例如:

s = 'hello'

print s[0],s[-1]

运行结果

注意,如果索引值超出索引范围的话,程序会报错,报错如下:

切片(Slicing)

选择字符串的子序列

语法[start:finish]

start:子序列开始位置的索引值

finish:子序列结束位置的下一个字符索引值。例如

s = 'hello'

print s[0:2]

运行结果:

注:如果不提供start或者finish,则默认start为第一个字符开始,finish为最后一个字符。

切片操作也可以接受第三个参数,[start:finish:countBy],其默认值为1。例如:

s = 'hello'

print s[0:5:2]

运行结果:

注:countBy可以为负数。如果值为-1的话则为获取字符串的逆序。例如:

s = 'hello'

print s[::-1]

字符串是不可变的,字符串一旦定义,则不可改变。即采用下标赋值的办法不可以改变字符串

例如:

s = 'hello'

s[-1] = 'a'

print s

运行结果:

字符串的方法

replace —— 替换

如果想要改变字符串内部的字符,可以使用字符串方法(对象提供的函数)

使用方法:my_str.replace(old, new),生成一个新的字符串,其中使用new替换old字符串。

例如:

s = 'hello'

print s.replace('l','a')#使得s生成了一个新的字符串

print s #s的值仍然为hello

s = s.replace('l','a')#如果想修改字符串则只能s进行赋值

print s

运行结果

注:replace方法返回一个新的字符串,原字符串内容不变,要想改变原来的字符串,则需要将新生成的字符串重新赋值给原来的字符串。

使用my_str.replace(old, new),方法将替换所有的old为new。

find —— 查找

例如:

s = 'hello'

print s.find('l')

运行结果:

返回所提供字符第一次出现的下标值,上例中参数为 l ,l 第一次出现的下标为2所以返回2

split —— 切分

例如:

s = 'hello world'

print s.split()

运行结果:

如果不提供任何参数,则split从空格处进行切分。

也可以提供一个参数,按照某一个特定字符进行切分,例如:

s = 'www.google.com'

print s.split('.')

运行结果:

也可以提供两个参数,按照某一特定字符切分 n 次,例如:

s = 'www.google.com'

print s.split('.',1)#只进行一次切分结果

运行结果

按照某一字符串进行切分n次,例如:

s = 'baidu||google||360||soso||yahoo'

print s.split('||',2)#从||处切分2次,不提供后面的参数可全部切分

运行结果:

按照某一特定字符分割n次,将得到的值分别赋值给n+1个字符串。

s = 'baidu||google'

str_1, str_2 = s.split('||',1)

print str_1

print str_2

运行结果:

实例1——人名游戏

读取人名列表names.txt然后将人名转换为首字母大写,其他字母小写的格式。

f = open('names.txt','r') #打开names.txt 只读模式r 可写模式w

for line in f: #按行遍历names.txt

line =line.strip()#strip方法去除空格,回车

print line.title()#title方法转换为首字母大写其与字母小写

f.close()#关闭文件

要点:

文件打开open函数返回的是一个对象,将该对象赋值给f

strip方法,用于一处字符串头尾指定的字符,没有任何参数时,默认删除空白符,包括:

n  换行    r  回车    t 水平制表

strip也可以接受字符串参数,将删除操作字符串头尾出现的指定字符,例如

str = "0000000hello!!!0000000"

print str.strip( '0' )

运行结果

判断回文字符串

在刚才例程的基础上,定义一个函数is_panlidrom,判断字符串是否为回文字符串,如果是返回TRUE否则返回FALSE,最后打印回文字符串。

分析:所谓回文字符串,指从头至尾和从尾至头相同的字符串,例如,bob就是一个回文字符串。

根据前文知识可得出,如果str[0] == str[-1] and str[1] == str[-2] and str[2] == str[-3]……str[len(str)/2] == str[-len(str)/2+1]条件全部成立时,str为回文字符串,否则不是。因此例程如下:

f = open('names.txt','r') #打开names.txt 只读模式r 可写模式w

def is_panlidrom(name):

low = 0#定义索引最小值

high = len(name) - 1#定义索引最大值,因为从零开始,所以最大为下标减一

while low < high:#当最小值小于最大值时,执行循环

if name[low] != name[high]:#第一个字符不等于最后一个字符,返回FALSE 不再继续判断

return False

low += 1#最小值加一

high -= 1#最大值减一

return True

for line in f:

line = line.strip()#移除头尾的空格回车等字符

if is_panlidrom(line):#调用函数

print line

f.close()

将其改造成递归版,思路如下:

根据递归掐头去尾留中间的方法,确定跳出递归的条件为字符串的长度为1的时候,返回其是回文字符串,否则进行判断str[0:-1]是否为回文字符串,依次递归:

f = open('names.txt','r') #打开names.txt 只读模式r 可写模式w

def is_panlidrom_rec(name):

if len(name) <= 1:#如果字符串长度为1,则直接返回True

return True

else:

if name[0] != name[-1]:#否则判断第一位和最后一位是否相等,如果否,返回FALSE

return False

else:

return is_panlidrom_rec(name[1:-1])#否则判断name[1:-1]是否为回文字符串

for line in f:

line = line.strip()

if is_panlidrom_rec(line):

print line

f.close()

更简单的方法

f = open('names.txt','r') #打开names.txt 只读模式r 可写模式w

for line in f:

line = line.strip()

if line == line[::-1]:#切片求逆序

print line

f.close()

字符串比较大小

字符大小比较的实质就是比较其ASCII码的大小,字符串大小比较是按照字典序排序。

首先比较两个字符串的第一个字符是否相同,如果相同,则比较下一个,如果不同,则字符串的大小关系由这两个字符的关系决定。

如果其中一个字符为空(较短),则其更小。

'a' < 'b'

True

'aaab'

True

'aa' < 'aaab'

Ture

'abc > 'bcd'

False

实例:定义函数is_ascending。判断传入字符串是否是升序排列

f = open('names.txt')#打开文件

def is_ascending(name):

p = name[0] #p赋值为第一个字符

for c in name:

print c,p

if p > c:#如果c,大于第一个字符,则返回否

return False

p = c #将p赋值为c

return True

for line in f:

line = line.strip()

if is_ascending(line):

print line

f.close()

以abc作为测试用例验证is_ascending函数。将参数’abc’传入is_ascending,其执行过程如下:

第一次循环时,p = a c = a 则 p = c,不满足p > c的条件,因此不执行return False语句。执行p = c,此时,p = a。

第二次循环时,p = a c = b 则 p < c,不满足p > c的条件,因此不执行return False语句。执行p = c,此时,p = b。

第三次循环时,p = b c = c 则 p< c,不满足p > c的条件,因此不执行return False语句。执行p = c,此时,p = c。但由于len(‘abc’)=3,因此循环到此结束。跳出循环,直接执行return True

字符串格式化(Formatting)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值