• note 8 字符串


    字符串String

    一个字符的序列
    使用成对的单引号或双引号括起来
    或者三引号"""   和  '''  表示块注释
    

    字符串运算

    长度 len()函数

    first_name = 'Michael'
    len(first_name)
    >>>7
    

    拼接 +

    name =  first_name + 'Jordan'
    print name
    >>>Michael Jordan
    

    重复 *

    name * 3
    >>>'Michael Jordan Michael Jordan Michael Jordan'
    

    必须乘整数、只能字符串

    成员运算符 in

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

    for 语句

    枚举字符串的每个字符
    

    计算一个字符串中元音字母的个数

    def vowles_count(s):
        count = 0
        for c in s:
            if c in 'aeiou':
                count += 1
        
        return count
    
    print vowles_count('Hello world')
    

    字符串索引 index

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

    [ ]

    切片 Slicing

    +选择字符串的子序列

    语法 [start : finish]

    start: 子序列开始位置的索引值
    finish: 子序列结束位置的下一个字符的索引值
    

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

    计数参数 Count by Argument

    +接收三个参数
    [start : finish : countBy]
    默认countBy为1

    my_str = 'hello world'
    my_str[0:11:2]
    >>>'hlowrd'
    

    +获得逆字符串
    -1

    my_str = 'spam'
    reverse_str = my_str[::-1]
    print reverse_str
    >>>maps
    

    字符串是不可变的 Immutable

    +一旦生成,则内容不能改变

    +通过切片等操作,生成一个新的字符串

    字符串方法 Methods

    +方法
    +对象提供的函数

    +注意
    +replace 方法返回一个新的字符串,原字符串内容不变
    +新字符串重新赋值给原来的变量

    更多字符串方法

    find

    split

    其他方法
    dir(str)
    ...

    人名游戏
    人名列表文件names.txt,将每个人名转换为首字母大写,其他字母小写的格式

    line不仅包括本行内容,还包括回车,输出本行内容后,还输出回车

    .strip() 去掉字符串开始和结尾的空格、回车等

    .title() 字符串变成首字母大写,其余字母小写

    f = open('names.txt','r')
    
    for line in f:
        line = line.strip()
        print line.title()
        
    f.close ()
    

    编写一个名为is_palindrome的函数判断一个人名是否为回文,入“BOB”
    1.

    f = open('names.txt','r')
    
    def is_palindrome(name):
        low = 0
        high = len(name) - 1
        
        while low < high:
            if name[low] != name[high]:
                return False
            low += 1
            high -= 1
            
        return True
    
    for line in f:
        line = line.strip()
        if is_palindrome(line):
            print line
    
    f.close ()
    

    2.递归实现

    f = open('names.txt','r')
    
    def is_palindrome_rec(name):
        if len(name) <= 1:
            return True
        else:
            if name[0] != name[-1]:
                return False
            else:
                return is_palindrome_rec(name[1:-1])
    
    for line in f:
        line = line.strip()
        if is_palindrome_rec(line):
            print line
    
    f.close ()
    

    字符串比较

    +任何一个字符都对应一个数字
    ASCII (American Standard Code for Information Interchange)
    +直接比较对应数字的大小

    字典序 Dictionary order

    +首先比较两个字符串的第一个字符
    +如果相同,则比较下一个字符
    +如果不同,则字符串的大小关系由这两个字符的关系决定
    +如果其中一个字符为空(较短),则其更小

    编写函数 is_ascending,判断一个人名的字母是否为升序排列(允许重复字母)

    f = open('names.txt','r')
    
    def is_ascending(name):
        p = name[0]
        
        for c in name:
            if p > c:
                return False
            p = c
            
        return True       
    
    for line in f:
        line = line.strip()
        if is_ascending(line):
            print line
    
    f.close ()
    

    字符串格式化 Formatting

    +输出更规格的结果
    format方法,如:

    +括号的格式
    {field name:align width.precision type}
    域名:对齐方式 整数-占用宽度.精度 类型

    对齐方式:> 向右对齐,< 向左对齐

    正则表达式 Regular Expressions

    +判断一个人名(name)是否满足下列模式

    c?a ?表示任意一个字符
    c?a *表示任意多个字符

    +正则表达式 用来描述字符串的模式
    .表示任意字符
    d+ 表示一系列数字
    [a-z]表示一个小写字母
    ....

    判断一个人名是否含有C.A模式

    import re
    
    f = open('names.txt','r')
    
    for line in f:
        line = line.strip()
        pattern - 'C.A'
        result = re.search(pattern,line)
        if result:
            print 'Name is {}'.format(line)
            
    f.close()
    

    正则表达式非常强大

  • 相关阅读:
    [POI2004] SZP (贪心+拓扑排序)
    【洛谷 P1525】 关押罪犯 (二分图+二分答案)
    【洛谷 P1073】 最优贸易 (Tarjan缩点+拓扑排序)
    【洛谷 P4320】 道路相遇 (圆方树,LCA)
    【CF1009F】 Dominant Indices (长链剖分+DP)
    【洛谷 P1707】 刷题比赛 (矩阵加速)
    【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)
    【洛谷 P1129】 [ZJOI2007]矩阵游戏 (二分图匹配)
    【CF558E】 A Simple Task (权值线段树)
    【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
  • 原文地址:https://www.cnblogs.com/OceanF/p/10777023.html
Copyright © 2020-2023  润新知