python学习(2)——字符串,列表,元组,集合

字符串

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)登陆:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值