字符串
1、序列支持的操作
字符串属于序列,序列支持的操作有:
定义一个字符串 s = ‘hello’
- 索引
s[i]:获取特定位置的元素,如s[0]=h,
hello的索引依次为0(-5)、1(-4)、2(-3)、3(-2)、4(-1) - 切片
s[i:j]:提取对应的部分作为一个序列,如s[0:3]=hel(包括i,不包括j)
如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串的长度;
扩展:s[i:j:k],k为递增步长,如s[0:3:2]=hl - 判断子串
判断一个字符串(或字母)是不是属于s,用in,或not in,返回True或False,如 - 重复
可用*n让一个字符串重复输入n遍 - 连接——“+“
- 计算长度——len()
2、字符串的常用操作
定义一个字符串s,我们可以用dir(s)查看字符串有哪些操作,或在编译工具(如ipython)里用Tab自动补齐看到:
1)查看操作的帮助
如:用help(s.center),可以看到它的参数,返回的类型,以及说明
2)s.center(width[,fillchar])——返回一个长为width的新字符串,在新字符串中原字符居中,其他部分用fillchar指定的符号填充,未指定时通过空格填充。
3)s.capitalize()——将字符串首字母大写
4)s.isalnum() ——判断是否都是字母或数字
s.isalpha() ——判断是否都是字母
s.isdigit() ——判断是否都是数字
s.islower() ——判断是否都是小写
s.isspace() ——判断是否都是英文空格
s.istitle() ——判断是不是都是标题(有大小写)
s.isupper() ——判断是不是都为大写字母
5)s.strip([chars])
——返回一字符串,将str中首尾包含指定的chars字符删除的字符串,未指定时,删除首尾的空格。
——s.lstrip()删除首部的;s.rstrip()删除尾部的
6)s.split()——以作为分割符对s进行切割,默认为空格
7)s.endswith(suffix[, start[, end]])——判断字符串是否以suffix结束,如果是,返回True;否则返回False
s.startswith(suffix[, start[, end]])——判断字符串是否以suffix开始
8)s.count(sub[, start[, end]])——返回sub在s中出现的次数,如果start与end指定,则返回指定范围内的sub出现次数。
9)s.find(sub[,start[,end]])——判断sub是否在s中,存在返回索引值,不存在返回-1
10)s.replace(old,new[,count])
——将s中的old字符串替换为new字符串,并将替换后的新字符串返回,如果count指定,则只替换前count个字符串
11)s.lower()——将字符串s所有字母转化为小写
s.upper()——将字符串s所有字母转化为大写
列表
列表的定义:list = []
列表内的元素可以是任意类型,包括数值类型,列表,字符串等均可
列表也是序列,所以索引,切片等列表也可以实现
列表的常用操作:
1、列表的添加
1)li.append()——在列表最后添加元素
2)li.insert(index, object)——在指定索引前添加元素
2、列表的修改
列表是可变类型的序列,所以修改列表中的元素时,可直接进行重新赋值
3、列表的删除
1)li.remove()——删除列表中某个元素
2)del(li)——删除整个列表或列表中某个元素
4、其他
1)li.sort()——排序
2)li.index(value, [start, [stop]])——查看对应元素的索引
3)li.pop([index])——弹出索引位置的元素,不填默认最后一个
小练习:
用列表实现一个简单的队列(先进先出)
实现以下功能(菜单如下)
o:pop(出队)
u:push(入队)
v:view(查看队列的元素)
q:quit(退出)
#!/usr/bin/env python
# coding:utf-8
_author_ = "xj"
li = []
print '''
欢迎来到队列管理系统
o:pop(出队)
u:push(入队)
v:view(查看队列的元素)
q:quit(退出)
'''
while True:
choice = raw_input("请输入您的选择:")
if choice.lower() == "u":
a = raw_input("请输入入队元素:")
li.append(a)
elif choice.lower() == "o":
print li.pop(0),"已出队"
elif choice.lower() == "v":
print li
elif choice.lower() == "q":
print " 退出!"
exit()
else:
print "请输入 o/O ; u/U ; v/V ; q/Q!"
运行结果如下:
元组
定义空元组tuple = ()
定义单个值的元组tuple = (aaa,);注意:一定要在后面加”,”
由于元组不是可变类型的序列,所以不能修改元组中的元素,但当元组中的元素有列表时,可修改相应部分。
元组也是序列,可以进行索引,切片,查看长度等操作
特性:对多个变量可通过元组方式分别赋值
元组的操作
元组所定义的方法比较简单,只有2个
1)tu.count(value)——该元素在元组中出现过几次
2)tu.index(value, [start, [stop]])——查看对应元素的索引
集合
集合的定义:
定义集合时,里面至少要有一个元素,不能为空(为空时类型不是set,而是dict);
里面可以包含元组,但不能包含列表,因为集合和元组都是不可变类型的序列,但列表是可变的。
集合是一个无序的,不重复的数据组合。可以通过set()方法将列表去掉重复的元素。
例:输入一个英文句子,统计该句的单词数目和词的种类。
#!/usr/bin/env python
# coding:utf-8
_author_ = "xj"
ch = raw_input("请输入一个英文短句:")
num = len(ch.split())
n2 = len(set(ch.split()))
print num, n2
运行结果:
集合的关系
集合有其他数据类型没有的属性,即关系测试,包含交集、差集、并集、是否为子集、是否为父集等方法。
s1 = {1, 2, 3, 4, 1, 3, 4}
s2 = {1,2,11,”hello”}
• 交集: s1.intersection(s2)——s1 & s2
s1.intersection_update(s2) //求交集并将交集赋给s1
• 并集: s1.union(s2)——s1 | s2
• 差集: s1.difference(s2)——s1 - s2
s2.difference(s1)——s1 - s2
• 对等差分 s1.symmetric_difference(s2)——s1 ^ s2
• 子集 s1.issubset(s2)
• 父集 s1.issuperset(s2)
集合的操作
集合的添加
s.add(1) #在集合中添加一项
s.update([1,3,4]) #在集合中添加多项,跟的参数应该是可迭代类型
集合的删除
s.remove(1) #删除集合中指定的元素,如果该元素不存在,则报错
s.discard(1) #删除集合中指定的元素,如果该元素不存在,则不报错
s.pop() #随机删除集合中的某个元素
s.clear() #清空集合的所有元素
集合的其他操作
print len(s) #显示集合set的长度
print 1 in s #检测某元素是否为集合s的成员,返回布尔值
综合练习
在上一次输入用户名,密码登陆的基础上,增加2个列表,一个存用户名users = [‘blue’, ‘red’],一个存密码passwd = [‘hello’, ‘westos’],增加菜单并实现功能:
c(C):create(创建新用户)(判断是否已存在该用户)
l(L):login(登陆)(3次机会)
#!/usr/bin/env python
# coding:utf-8
__author__ = "xj"
def create():
name = raw_input("请输入用户名:")
if name in users:
print "该用户名已经存在"
else:
pass1 = raw_input("请输入密码:")
pass2 = raw_input("请重复输入密码:")
if pass1 == pass2:
users.append(name)
passwd.append(pass1)
print "***用户创建成功!!!***"
else:
print "***两次密码输入不一致,用户创建失败!!!***"
def login():
i = 0
while (i < 3):
name = raw_input("name:")
password = raw_input("password:")
i += 1
if name in users and password in passwd and users.index(name)==passwd.index(password):
print "\n\twelcome to user manage system!\n"
exit()
print "用户名或密码错误,请重新输入,你还有%d次机会!" % (3 - i)
print "你已经登陆过三次,请10min后再登陆。"
users = ['blue', 'red']
passwd = ['hello', 'westos']
print '''
欢迎来到用户管理系统
c(C):create(创建新用户)
l(L):login(登陆)
q:quit(退出)
'''
while True:
choice = raw_input("请输入您的选择:")
if choice.lower() == "c":
create()
elif choice.lower() == "l":
login()
elif choice.lower() == "q":
print "\n\t***退出!***\n "
exit()
else:
print "请输入 c/C ; l/L ; q/Q!"
运行结果:
1)创建用户:
2)登陆: