序列字符串

序列

序列:成员有序排列,并可以通过下标偏移量访问到它的一个或几个成员。

字符串、列表和元组

序列操作符

序列操作符 作用
seq[ind] 获得下标为ind的元素
seq[ind1:ind2] 获得下标从ind1到ind2的元素集合
seq*expr 序列重复expr次
seq1+seq2 连接序列seq1和seq2
obj in seq 判断obj元素是否含在seq中
obj not in seq 判断obj元素是否不包含在seq中
  1. 成员关系操作符(in、not in)
  2. 连接操作符 (+)
  3. 重复操作符 (*)
  4. 切片操作符 ([],[:],[::])

切片:通过下标范围来获取一组序列元素的访问方式

索引可以为正或负值 负从结束点起始 [:] \ [::]

单索引 []不可越界

print ("faye",'len','day')[1]  # 面向对象  所以无须设置变量
sequence(starting_index:)  # 默认至结束
sequence(:ending_index)  # 默认从起始位
sequence(starting_index:ending_index)
sequence(starting_index:ending_index:step) # step 步进值
# !/usr/bin/python
# -*- coding: utf-8 -*-
# __author__:  Rewrite

def cutLastChr(char="test"):
    """每次截取字符串最后一位输出"""
    if not isinstance(char, str):
        return
    i = -1
    for i in range(-1,-len(char), -1):# 输出完整字符串  for i in [None] + range(-1,len(char),1)
        print(i)
        print(char[:i])


if __name__ == "__main__":
    test_char = 'abcde'
    print(test_char[0:-1])  # 左闭右开
    cutLastChr(test_char)

内建函数

序列类型转换工厂函数

函数 含义
list(iter) 把可迭代对象转换为列表
str(obj) 把obj对象转换为字符串(对象的字符串表示方法)
unicode(obj) 把对象转为unicode字符串(使用默认编码)
basestring() 抽象工厂函数,其作用仅仅是str和unicode父类,不能实例化
tuple(str) 把一个可迭代对象转换为一个元组对象

可迭代对象 推荐阅读:Python进阶之生成器

浅拷贝与深拷贝 浅只做引用的变更

可用内建函数

序列类型可用的内建函数

字符串

基本操作

# !/usr/bin/python
# -*- coding: utf-8 -*-
# __author__:  Rewrite

def intString():
    aString = 'hello world'
    print(aString)
    b = str(range(4))
    print(b[1])
    # b[2] = aString  单个字符你只能做访问操作  因其不可变性
    # del b[3]
    print(b)
    aString = ''
    del b
def compareString():
    a = 'afc'
    b = 'aef'
    # ord(chr) 获取Ascii chr(asc) 获取对应字符
    # 比较 从第一位开始比较ASCII 相同则继续往下一位比较
    if a < b:
        print('a < b')
    else:
        print('a >= b')

if __name__ == "__main__":
    intString()

拼接建议使用如下:

def conncetString():
    print('%s %s' % ('Spanish','China'))
    # Spanish China
    s = ' '.join(('Spanish','China')).upper()
    print(s)
    # SPANISH CHINA
    b = 'hello' 'world'
    f = ('http://'
         'localhost'
         ':8000'
         '/cgi-bin/friend.py')
    print(f)
    # http://localhost:8000/cgi-bin/friend.py
    a = '您好'
    print(a)

只适用于字符串的操作符

格式化操作符(%)

'%(格式化符号)[格式化辅助指令]'%(变量)

  • 字符串格式化符号

字符串格式化符号

  • 格式化操作符辅助指令

格式化操作符辅助指令

def stringFormat():
    #  元组类型的参数作为转换
    print("MM/DD/YY = %02d/%02d/%d" % (2, 15, 67))
    w, p = 'Web', 'page'
    print('http://xxx.yyy.zzz/%s/%s.html' % (w,p))
    # MM / DD / YY = 02 / 15 / 67
    # http: // xxx.yyy.zzz / Web / page.html
    # 字典类型的参数提供给格式化操作符
    s = 'There are %(howmany)d %(lang)s Quotation Symbols ' % \
        {'lang':'Python','howmany':3}
    print(s)
    # There are 3 Python Quotation Symbols

str()与repr()调试

字符串模板

优点:无须知道替换的字段类型

substitute safe_substitute

    # 注意此处犯了一个错误,文件命名为string.py 导致找不到template  文件命名不要和内建模块重名
    s2 = Template('There are ${howmany} ${lang} Quotation Symbols ')
    # key不存在 keyError异常
    s3 =  s2.substitute(lang='Python',howmany=3)
    print(s3)
    # There are 3 Python Quotation Symbols
    print(s2.safe_substitute(lang='python'))
    # There are ${howmany} python Quotation Symbols 

原始字符串(r/R)

在原始字符串里,所有低字符都是直接按照字面的意思来使用,没有转义或不能打印的字符。

使用:在原始字符串字符号前加r或R

# !/usr/bin/python
# -*- coding: utf-8 -*-
# __author__:  Reworld
import re
 
if __name__ == "__main__":
    # 原始字符串的使用 r或R
    m = re.search('\\[rtfvn]', r'hello world\n')
    if m is not None: print(m.group()) # 空
    m2 = re.search(r'\\[rtfvn]', r'hello world\n')
    if m2 is not None: print(m2.group()) # \n

Unicode字符串操作符(u/U)

内建函数

# !/usr/bin/python
# -*- coding: utf-8 -*-
# __author__:  Reworld

if __name__ == "__main__":
    str1 = 'abc'
    str2 = 'lmn'
    print(cmp(str1, str2))
    print(cmp('abc','gef'))
    print(len(str1))
    print(max(str2),min(str2))
    # -1
    # -1
    # 3
    # ('n', 'l')

    for i,t in enumerate(str2):print(i,t)
    s,t = 'abc','123'
    print(zip(s,t))
    # (0, 'l')
    # (1, 'm')
    # (2, 'n')
    # [('a', '1'), ('b', '2'), ('c', '3')]

    if isinstance(u'\0xAb',str):
        print('true')
    else:
        print('false')

    print(isinstance(u'',basestring))
    # false
    # True

    print chr(65) # 0-255
    print ord('A') # 一个字符作为参数
    print ord(u'\u2345')
    # A 
    # 65 ascii值
    # 9029 unicode数值

字符串函数

字符串的独特特性

特殊字符串与控制字符

特殊字符:包括反斜杠转义、可以直接用ASCII码来标示特殊字符

反斜杠开头的转义符

控制字符:不常用,不可打印的ASCII码值来做定界符。用做字符串里面的定界符。

三引号

允许一个字符串跨多行,字符串可以包含换行符、制表符以及其他特殊字符。通常是一对连续的单引号或双引号('''test'''"""test""")。所见即所得。

HTML和SQL

字符串不可变性