python核心编程:第六章。

第六章:序列,字符串,列表和元组

列表,序列,元组。

in 和not in

判断元素是否属于一个序列,或者判断一个字符是否在一个字符串内,返回一个布尔值。
obj[not] in sequence

序列类型操作符

  1. (+)作用:把一个序列和一个相同类型序列连接起来,可以是字符串或者是元组什么的。
    把字符串放进列表,使用join方法,更加节约内存。列表使用extend更加方便。
  2. (*)作用:拷贝一个序列, sequence * copies_int
  3. 切片操作符([]):[::-1] 可视为翻转操作。 [::2]可视为隔一个取一个的操作

内建函数

  1. max(item,key=None) 返回最大值,key为一个可以传给 sort()方法的,用于比较的回调函数.
  2. enumerate():接受一个可迭代对象(例如元组,列表),返回一个迭代器。该对象生成由 iter 每个元素的 index 值和 item 值组成的元组。
  3. reversed():接受一个序列对象,返回一个逆序访问的迭代器。
  4. sum(seq, init=0):返回init的总和,效果等同于reduce(operaor.add,seqm,init)
  5. zip():返回一个列表,第一个元素是输入参数的所有元素的第一个元素,第二个元素是输入参数的第二个组成的元组...。
  6. cmp():比较两个字符串的ascii码大小。
  7. chr()和ord():chr是把数字转化成对应ascii的字符,ord则是把字符转化成ascii值。

字符串内建函数(太多了,我就直接复制了一下,用到再查)

string.capitalize() 把字符串的第一个字符大写
string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding='UTF-8',errors='strict') 以 encoding 指定的编码格式解码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
string.encode(encoding='UTF-8',errors='strict')a以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常, 除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0,end=len(string))b,e 检查字符串是否以 obj 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 obj 结束, 如果是, 返回 True,否则返回 False.
string.expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格, 默认的空格数 tabsize 是 8.
string.find(str, beg=0,end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg=0,end=len(string)) 跟find()方法一样, 只不过如果str不在string中会报一个异常.
string.isalnum()a, b, c R 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha()a, b, c如果string至少有一个字符并且所有字符都是字母则返回True,否则返回 False
string.isdecimal()b, c, d 如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit()b, c 如果 string 只包含数字则返回 True 否则返回 False.
string.islower()b, c 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False                             
string.isnumeric()b, c, d 如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()b, c 如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()b, c 如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()b, c 如果 string 中包含至少一个区分大小写的字符, 并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq) Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower() 转换 string 中所有大写字符为小写.
string.lstrip() 截掉 string 左边的空格
string.partition(str)e 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组(string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2,num=string.count(str1))把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string))类似于 find()函数,不过是从右边开始查找.
string.rindex( str, beg=0,end=len(string)) 类似于 index(), 不过是从右边开始.
string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str)e类似于 partition()函数,不过是从右边开始查找.
string.rstrip() 删除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
string.splitlines(num=string.count('\n'))b, c 按照行分隔, 返回一个包含各行作为元素的列表, 如果 num 指定则仅切片 num 个行.
string.startswith(obj, beg=0,end=len(string))b, e 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end指定值,则在指定范围内检查.
string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
string.swapcase() 翻转 string 中的大小写
string.title()b, c返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del="") 根据str给出的表(包含256个字符)换string的字符,要过滤掉的字符放到 del 参数中
string.upper() 转换 string 中的小写字母为大写
string.zfill(width) 返回长度为 width 的字符串, 原字符串 string 右对齐, 前面填充0

列表的内建函数

List Method Operation
list.append(obj) 向列表中添加一个对象 obj
list.count(obj) 返回一个对象 obj 在列表中出现的次数
list.extend(seq)a 把序列 seq 的内容添加到列表中
list.index(obj, i=0,j=len(list)) 返回 list[k] == obj 的 k 值,并且 k 的范围在i<=k<j;否则引发 ValueError 异常.
list.insert(index, obj) 在索引量为 index 的位置插入对象 obj.
list.pop(index=-1)a 删除并返回指定位置的对象,默认是最后一个对象
list.remove(obj) 从列表中删除对象 obj
list.reverse() 原地翻转列表
list.sort(func=None,key=None,reverse=False)b 以指定的方式排序列表中的成员,如果 func 和 key 参数指定,则按照指定的方式比较各个元素,如果 reverse 标志被置为True,则列表以反序排列.

练习:

6.1字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分?

string.find(str, beg=0,end=len(string)):检测str是否包含在string中,可自己指定范围。
string.rfind string.index string.count也能达到目的

6–2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且

可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是keyword.kelist)来帮你.
keyword.kelist可以得到python关键字列表。keyword.iskeword("str"),判断str是否是python关键字,返回布尔值。

# -*- coding: utf-8 -*-
import keyword,string
alphas = string.letters + "_"
nums = string.digits
print "Welcom to the Identifier Checker v2.0"
str = raw_input("请输入字符串:")
if str[0] not in alphas:
    print "您输入的不是有效标识符"
else:
    for otherChar in str[1:]:
        if otherChar not in alphas+nums:
            print "无效的标识符"
    else:
        if str in keyword.kwlist :
            print "标识符不能为python关键字"
        else:
            print "有效的标识符"

6–6. 字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格

str = raw_input("请输入字符串")
for head in range(len(str)):
    if str[head] is " ":
        pass
    else:
        str = str[head:]
        break
for end in range(-1,-len(str),-1):
    if str[end] is " ":
        pass
    else:
        str = str[:end+1]
        break
print str

6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.

str1 = raw_input("请输入字符串")
str2 = ""
for i in str1:
    if 96<ord(i)<123:
        str2+=chr(ord(i)-32)
    elif 64<ord(i)<91:
        str2+=chr(ord(i)+32)
    else:
        str2+=i
print str2

6-12.字符串。创建第三个函数,名字叫 subchr(),声明如下:def subchr(string, origchar, newchar)
subchr()跟 findchr()类似,不同的是,如果找到匹配的字符就用新的字符替换原先字符.返回修改后的字符串.

def subchr(string, origcher, newchar):
    x=range(len(string))
    for i in x:
        print i
        if string[i]==origcher:
            string=string[:i]+newchar+string[i+1:]
    return string
string, origchar, newchar=raw_input("string?"), raw_input("origchar?"), raw_input("newchar?")
print string ,origchar,newchar
print subchr(string,origchar,newchar)
posted @ 2016-08-16 22:56  即刻  阅读(893)  评论(1编辑  收藏  举报