Python通用序列操作
Posted mr-chenshuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python通用序列操作相关的知识,希望对你有一定的参考价值。
注:
Python支持容器的数据结构概念
容器基本上就是可包含其他的对象,两种主要的容器就是序列和映射
序列中每隔元素都有编号
映射中每隔元素都有键
通用序列操作
索引、切片、相加、相乘、、成员资格都适用于所有的序列
索引:
序列中是所有元素都有编码,从0开始递增,可已使用[索引]来访问各个元素
字符串就是由字符组成,索引0指向第一个元素
name = "shuai" print(name[0]) # s print(name[3]) # a
使用负数索引时,从右往左数,最后一个元素的位置是-1
name = "shuai" print(name[-1]) # i print(name[-3]) # u
对于字面量(所有序列类型均可),可以直接进行索引操作,无需现将其赋值个变量
print("shuai"[3]) # a print(["a", "b", 2, 5][2] ) # 2
函数返回一个序列,可以直接进行索引操作
x = input("name:")[3] # shuai print(x) # a
练习:
months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ] endings = ["st", "nd", "rd"] + 17*["th"] + ["st", "nd", "rd"] + 7*["th"] + ["st"] year = input("year:") month = input("month:") day = input("day:") month_number = int(month) day_number = int(day) month_name = months[month_number-1] ordinal = day + endings[day_number-1] print(month_name + " " + ordinal + " " + "," + year)
切片:
使用切片来访问特定范围内的元素,使用两个索引,用冒号分隔
tag = "<a href=‘http://www.python.org‘>Python web site</a>" print(tag[9:30]) # http://www.python.org print(tag[32:-4]) # Python web site
第一个索引是包含在切片内的,但是第二个索引是不包的,实际上是该索引的前一个元素:前包后不包
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[3:6]) # [4, 5, 6] print(numbers[0:1]) # [1]
切片简写:
访问最后三个元素,可以明确的指出
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[6:9]) # [7, 8, 9] print(numbers[-3:-1]) # [7, 8]
上面发现使用负数索引时不能包含最后一个元素,按照索引前包后不包是规则,是不是应该写0?
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[-3:0]) # []
实际上,当第一个索引指定的元素位于第二个索引指定的元素后面时(上面 索引-4的值是7,而0索引的值是 1),结果就是空序列
简写来了!
如果切片结束在序列末尾,那么可以不写第二个索引
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[-3:]) # [7, 8, 9]
同理,如果切片开始于序列的开头,那么可以省略第一个索引
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[:3]) # [1, 2, 3]
要赋值整个序列,可以将两个索引都省略
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[:]) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
练习:
url = input("Plese enter the URL:") domain = url[11:-4] print("Domain name:" + domain) # Plese enter the URL:http://www.python.org # Domain name:python
步长:
切片时,显示或者隐式的指定起点和终点,通常会省略一个参数:步长
普通的切片中,步长是1,会从第一个元素移动到下个元素,单位就是1,可以看到加了步长参数1时,和步写没有区别
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[1:6:1]) # [2, 3, 4, 5, 6] print(numbers[1:6]) # [2, 3, 4, 5, 6]
当步长改为2时,就会每隔一个元素取一次值
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[::3]) # [1, 4, 7] print(numbers[1:6:2]) # [2, 3, 4, 5, 6] print(numbers[1:6]) # [2, 3, 4, 5, 6]
步长也可以为负数,即从右往左取元素,但是不能为0
步长为负数时,第一个索引一定要大于第二个
省略索引时,步长为正数,从左到右,步长为负数时,从右到左
numbers = [1,2,3,4,5,6,7,8,9] print(numbers[::-2]) # [9, 7, 5, 3, 1] print(numbers[::2]) # [1, 3, 5, 7, 9] print(numbers[1:6:-1]) # [] print(numbers[8:2:-1]) # [9, 8, 7, 6, 5, 4] print(numbers[::0]) # ValueError: slice step cannot be zero
序列相加:
可以使用 + 来拼接序列
不能拼接不同类型的序列
print(["a", 1, 2] + [3, 4, 5]) # [‘a‘, 1, 2, 3, 4, 5] print("shuai" + "123") # shuai123 print("shuai" + [1, 2, 3]) # TypeError: must be str, not list
乘法:
将序列和数n相乘时,会重复这个序列n次常见一个新的序列
print("shuai" * 3) # shuaishuaishuai print([1, 2, 3] * 5) # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
None:
空列表是用[]来创建的,不包含任何内容
如果要创建一个可包含10个元素的列表,但是没有任何内容,可以使用None,None表示什么都没有
l = [None] * 10 print(l) # [None, None, None, None, None, None, None, None, None, None]
成员资格检查:
使用in来检查指定的值是否包含在序列中,检查是够满足指定的条件,并返回相应的值:满足时返回True,反之返回False
这样的运算符成为布尔运算符
布尔值:True或者False
s = "shuai" print("s" in s) # True print("2" in s) # False l = [1, 2, 3, 4, 5] print(1 in l) # True print("2" in l) # False
长度、最小值、最大值
内置函数len、min、max
len函数返回序列包含的元素个数
min返回序列中最小的元素
max返回序列中最大的元素
min和max可以直接提供参数
l = [1, 3, 5, 8, 9, 6] print(len(l)) # 6 print(min(l)) # 1 print(max(l)) # 9 print(min(1, 5, 7)) # 1 print(max(8, 4, 2)) # 8
以上是关于Python通用序列操作的主要内容,如果未能解决你的问题,请参考以下文章