一、字符串 String:
•双引号或者单引号中的数据,就是字符串*切片的语法:[起始:结束:步长]:
起始与结束值分别为半开半闭区间,如下在sublime的IPython下运行:
>>> name = 'abcdefg'
>>> name[0] #以下标访问字符串中的元素
'a'
>>> len(name) #len()函数求出字符串长度
7
>>> name[0:len(name)-1]
'abcdef'
>>> name[0:len(name)] #对比发现范围为半开半闭
'abcdefg'
关于步长:
>>> name[1:4:2] #步长为跨越的字符个数 从1开始到3结束 跨越两个字符输出
'bd'
>>> name[::-1] # 步长为-1表示逆向输出
'gfedcba'
字符串中的常用函数方法:
>>> str1 = 'hello world,python'
>>> str1.find('py',0,len(str1)) #find()方法用来字符串匹配,并返回第一处匹配的位置,从下标0到结尾寻找
12
>>> str1.find(' ')
5
>>> str1.find('a') #没有找到 返回-1
-1
>>> str1.index("hello",0,len(str1)) #index()方法类似于find()但是匹配失败会返回异常
0
>>> str1.index("Hello",0,len(str1))
Traceback (most recent call last):
File "<console>", line 1, in <module>
ValueError: substring not found
>>> str1.count("h",0,len(str1)) #count()方法表示统计目标字符出现次数 后面两个参数分别表示起始与结束位置
2
>>> str1.replace("h","r",str1.count("h")) #replace()方法表示将h替换为r,并且替换h出现的次数
'rello world,pytron'
>>> str1.split(" ") #字符串分割方法
['hello', 'world,python']
>>> str1.split(",",2) #2表示分割次数
['hello world', 'python']
>>> str1 = "hello world Python"
>>> str1.startswith("h") #判断是否以h开头
True
>>> str1.startswith("w",5) #判断str1[5]是否为w
False
>>> str1.startswith("w",6) #判断str1[6]是否为w
True
>>> str.endswith("n") #类似于startswith()
True
>>> str.endswith("j")
False
>>> str1.strip("h") #strip() 方法用于移除字符串头尾指定的字符(默认为空格)
'ello world Python'
>>> str1.capitalize() #首字母大写
'Hello world python'
>>> str.rjust(30,"0") #rjust() 返回一个原字符串右对齐,并使用空格填充至长度 30 的新字符串。如果指定的长度小于 #字符串的长度则返回原字符串。
'000000000000Hello world python'
>>> str.ljust(30,"0") #类似于rjust()
'Hello world python000000000000'
>>> str.center(30," ") #以30的宽度居中显示,并填充空格
' Hello world python '
>>> str.center(30,"-")
'------Hello world python------'
index()与rindex()的区别:相对称的关系,和KMP算法有点相似
>>> s = "love Python,dislike Python"
>>> s.index("Python") #返回左边第一个子串'python'的下标
5
>>> s.rindex("Python") #返回右边第一个子串'python'的下标
20
列举一道字符串分割题目:
返回使用空格或者' '分割后的倒数第二个子串 str = "haha nihao a height woshi nide hao pengyou"
有些迷惑人的题目,据说是面试题,分析题意后大概理解应该用字符串分割方法来解决,但是里面包含了制表符,空格,换行,怎样进行分割?可以回归分割方法的原始定义:
str.split(str="", num=string.count(str)).
str -- 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等。
num -- 分割次数。
因此应该用不带参数的分割方法
str = "haha nihao a height woshi nide hao
pengyou"
str1 = str.split()
print(str1[-2])
结果为 'hao'
二、列表 List:
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
>>> names = ['liubei','guanyu','zhangfei',3]
>>> names[0]
'liubei'
>>> names[len(names)-1]
3
>>> names[len(names)-2]
'zhangfei'
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
列表相关操作:
•in(存在),如果存在那么结果为true,否则为false
•not in(不存在),如果不存在那么结果为true,否则false
#-*-coding:utf-8-*-
#列表添加元素操作
names = ['liubei','guanyu','zhangfei',3]
for x in names: #利用for遍历列表
print(x)
i = 0
while i < len(names): #利用while遍历列表
print(names[i])
i += 1
str = ["wangbo","dxnaicnl","cnewiu"]
names.extend(str) #整个添加进去
names.insert(4,"xnsac") #下标添加 位置4添加“xnsac”
for x in names:
print(x)
#-*-coding:utf-8-*-
#定义变量A,默认有3个元素
A = ["xiaoWang","xiaoZhang","xiaoHua"]
print("------添加之前,列表A的元素------")
for tempName in A:
print(tempName)
print("
")
#提示并添加元素
A[1] = "xiaoLu" #修改元素
temp = raw_input("请输入要添加的学生姓名:") #Python 2.7 下raw_input
A.append(temp) #单个元素添加到末尾
print("
")
#添加完成后,遍历输出添加后的列表
print("------添加之后列表A的元素-------")
for tempName in A:
print(tempName)
print("
")
#待查找的列表
#A = ["xiaoWang","xiaoZhang","xiaoHua"]
#获取用户要查找的元素
findName = raw_input("请输入需要查找的名字:")
#进行遍历查找
if findName in A:
print("他在列表中!")
elif findName not in A:
print("他不在列表中!")
#获取用户要删除的元素
delName = raw_input("请输入要删除的人:")
#进行删除操作
A.remove(delName)
#遍历输出
print("-------删除后列表A的元素-------")
for tempName in A:
print(tempName)
print("
")
del A[0] #删除第一个元素
for tempName in A:
print(tempName)
print("
")
A.pop() # 删除末尾元素 并返回末尾元素
for tempName in A:
print(tempName)
print("
")
对列表元素进行排序:
>>> a = [3,6,4,2,14]
>>> a.sort() # 表示从小到大
>>> a
[2, 3, 4, 6, 14]
>>> a.sort(reverse = True) #表示从大到小
>>> a
[14, 6, 4, 3, 2]
>>> a = ["a","b","f","d"]
>>> a.sort() # 对字符串列表进行排序
>>> a
['a', 'b', 'd', 'f']
三、元组 Tup
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
如下实例:
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";
创建空元组
tup1 = ();
元组中只包含一个元素时,需要在元素后面添加逗号:
tup1 = (50,);
元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
例如:
>>> a = ('a', 'b', 'c', 'a', 'b') >>> a.count("b") #输出b的个数 count方法 2
a = ('a', 'b', 'c', 'a', 'b') a.index('a', 1, 3)
输出会报错,无法在1到2区间内找到'a'
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:(元组建可以用+、*进行运算)
# -*- coding: UTF-8 -*-
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');
# 以下修改元组元素操作是非法的。
# tup1[0] = 100;
# 创建一个新的元组
tup3 = tup1 + tup2;
print tup3;
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : "
print tup;
四、字典 Dictionary
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
示例代码如下:
>>> info = {name:zhangsan,age:18}
>>> info["name"]
'zhangsan'
>>> info["school"] = "hpu"
>>> info
{'age': 18, 'name': 'zhangsan', 'school': 'hpu'}
>>> del info['name']
>>> info
{'age': 18, 'school': 'hpu'}
在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:
age = info.get('age')
>>> age = info.get("age") #并不知道是否有age
>>> print(age)
None #age是none
>>> age = info.get("age",18)
>>> age #为age设置默认值
18
相关字典操作如下:
info = {'name':'班长', 'sex':'f', 'address':'地球亚洲中国北京'}
# print('id为:%d'%info['id'])#程序会终止运行,因为访问了不存在的键
newId = input('请输入新的学号:')
info['id'] = int(newId)
print('添加之后的id为:%d'%info['id'])
#如果在使用 变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素
# del info
# print(info)
info.clear() #清空字典