序列字符串
序列
序列:成员有序排列,并可以通过下标偏移量访问到它的一个或几个成员。
字符串、列表和元组
序列操作符
序列操作符 | 作用 |
---|---|
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中 |
- 成员关系操作符(in、not in)
- 连接操作符 (+)
- 重复操作符 (*)
- 切片操作符 ([],[:],[::])
切片:通过下标范围来获取一组序列元素的访问方式
索引可以为正或负值 负从结束点起始 [:] \ [::]
单索引 []不可越界
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
字符串不可变性