前一段时间因为工作的需要在Java中调用Python脚本,自己之前对Python只是停留知道有这种语言基础上,所以自己看的一脸懵逼,为了更高效的工作,自己决定就学习一下,本人也是边学边做记录,如果哪有了解不到位的还望各位指正。
今天首先看看Python中的序列,Python中有六中内置的序列,分别是列表(list)、元组、字符串、Unicode字符串、buffer对象、xrang对象。
1:序列的通用操作
Python中所有序列都有一些通用的操作,如引索、分片、加、乘、成员资格检查操作。
1.1:引索
我们可以通过引索来访问序列中某个元素的值,譬如:
mString = "python"
print(mString[0])
print(mString[1])
print(mString[3])
print(mString[-1])复制代码
和其他语言一样,引索的值是从0开始,第一个元素的下标是0,不过需要注意的是Python允许元素的引索可以是负值,负数的时候元素从右边开始计算,-1表示右边第一个元素,-2表示倒数第二个元素,Java中就不允许引索为负值的情况出现。
2.2 切片
Python中的切片有点类似Java字符串的截取功能,但是也不完全相同,引索每次只能访问一个元素,切片每次可以访问一定范围的元素,切片中使用冒号来分割两个引索。
使用切片来获取一个序列的一部分元素
# utf-8
mString = "python"
# 序列的切片操作
print(mString[0:3]) # pyt复制代码
从上面的例子中可以看出,切片操作是一个“左闭右开”的操作,就是它会包含左边引索的值,却不包含右边的引索的值,那我们怎么访问最后一个元素呢,
# 切片访问序列的最后一个元素
print(mString[0:10]) #python
print(mString[1:]) #ython
print(mString[:]) #python
# 第一个引索必须小于第二个引索
print(mString[3:1]) #复制代码
发现Python切片操作中元素的引索不会越界,当大于序列引索的时候返回最后一个元素的值,因此我们可以使用这个特新来访问最后一个元素,第二种方式就是右边元素的引索我们不写,Python默认会返回最后一个元素的值,如果两个引索都不写会返回整个字符串的值,在使用切片的时候第一个引索的值必须小于第二个引索的值。
更改切片的步长,上面看到切片的操作默认的步长是1,我们可以显示的指定步长,
# 显示的指定步长
print(mString[1:6:2]) #yhn复制代码
我指定切片的步长为2,它会每个2个元素取一个值,注意设置步长不能为0
2.3:序列的加操作
序列的加操作使用加号(+)操作就可以
# 序列的加操作
print([1,2]+[3,4,5]) #[1, 2, 3, 4, 5]复制代码
只有两种相同的序列才能进行相加,譬如下面的列表和字符串相加就会报错
# 序列的加操作
print([1,2]+[3,4,5]) #[1, 2, 3, 4, 5]
# print([1,2]+"string")
#TypeError: can only concatenate list (not "str") to list
print([1,2]+"string")复制代码
2.4:序列的乘法
python乘法操作,用一个数N乘以一个序列,产生一个新序列会将原来的序列重复N边
# utf-8
mString = "python"
# 序列的乘法操作
print(mString * 2) #pythonpython复制代码
2.5:成员检查
检查某个元素是否在一个序列中,Python中使用in运算符,它返回一个布尔值,如果存在返回真值(true),不存返回假(false),in运算是大小敏感的
# utf-8
mString = "python"
# 序列成员检查
print( "p" in mString) #True
print("P" in mString) #False
print("w" in mString) #False复制代码
2:列表(list)
其实上面我们已经使用过列表,如[1,2,3],python中使用方括号([])表示一个列表,列表中的每个元素使用逗号分割,上面介绍序列的通用操作也都统统适用于列表的操作中。
列表中类型可以不同,声明一个列表,
mList = [1,"2",-3]复制代码
列表是可变的,可以改变列表的值,列表有一些专用的操作。
# 列表操作
mList = [1,2,3,"3","str","python",56.3,-6]
# [1, 2, 3, '3', 'str', 'python', 56.3, -6]
print(mList)
# 修改列表的值
mList[1] = 15;
[1, 15, 3, '3', 'str', 'python', 56.3, -6]
print(mList)复制代码
上面将列表引索为1的值修改为15
删除一个元素,使用del 运算删除一个元素
del mList[0]
print(mList)复制代码
- append方法
列表末尾添加元素
mlist = [1,2,"str",45.5]
mlist.append("python")
print(mlist)复制代码
append()方法不会返回一个新的列表,它是在原有列表上操作的
- count()
统计某个元素在列表中出现的次数
print(mlist.count(1)) # 1复制代码
- extend
上面的append()每次只能添加一个值,extend()方法可以每次追加一个列表的多个值
mlist1 = [10,23,45]
mlist.extend(mlist1)
print(mlist) #[1, 2, 'str', 45.5, 'python', 10, 23, 45]复制代码
这个看起来和开始的加操作(+)一样,但是二者是有区别的,extend()方法是修改了被扩展的列表,在这就列表mlist,而连接操作是返回一个新的列表
- index()
获取某个元素在列表中第一次出现的引索位置
print(mlist.index(2)) # 1复制代码
某个值在列表中找不到时,index()会发生异常,个人感觉这不太友好,譬如Java中找不到时返回固定的-1
- insert()
列表任意位置插入一个值,在mlist第一个值的位置插入一个“test”
mlist.insert(0, "test")
print(mlist) #['test', 1, 2, 'str', 45.5, 'python', 10, 23, 45]复制代码
- pop()
从列表中删除一个元素(默认是最后一个元素)并返回该值
print(mlist.pop()) # 45
print(mlist) # ['test', 1, 2, 'str', 45.5, 'python', 10, 23]复制代码
- remove()
从列表中删除第一个匹配的值
mlist = [1,2,"str",45.5]
mlist.remove(2)
print(mlist) #[1, 'str', 45.5]复制代码
该方法也是原位修改的,没有返回新的列表
- reverse()
列表值反转
mlist = [1,2,"str",45.5]
mlist.reverse()
print(mlist) # [45.5, 'str', 2, 1]复制代码
3:元组
元组也是Python中的一种序列,它和列表不通的时,元组是不可改变的,元组使用小括号(也可以不用小括号),列表使用方括号,创建元组也很简单
tup1 = (1, 2, 3, 4, 5 );
tup2 = "a", "b", "c", "d";复制代码
创建空元组
tup1 = ();复制代码
创建只有一个值的元组
tup1 = (1,);复制代码
就算只有一个值的元组也要添加逗号,发现了没有,元组中逗号才是最重要的,加不加小括号没关系,看下面的例子
print(3*(2+3)) # 15
print(3*(2+3,)) # (5, 5, 5)复制代码
元组的操作上面的操作相似,就不在列举了