4.1 定义序列
同一个序列,不仅可以包含相同数据类型值,还可以包含不同数据类型的值。
name = ['uuu','fff','ooo']
print(name)
name = ['uuu','fff','ooo',123,123.456,False]
print(name)
序列的元素如果是另外一个序列,那么就相当于一个二维或多维数组。
# 由于子序列长度不一,所整体是锯齿形状的序列
names = ["Bill", "Mike"]
numbers = [1,2,3,4,5,6]
salary=[3000.0,4000.0,5000.0]
flags = [True,False,True,True]
values = [names,numbers,salary,flags,['a','b']]
for value in values:
print(value)
4.2 序列的基本操作
4.2.1 通过索引操作序列元素
序列中的所有元素都是有编号的,编号都是从0开始递增,访问序列中的所有元素可以访问编号,这个编号被称为索引。
names = ["Bill", "Mary", "Jack"]
print(names[0]) # 运行结果:Bill
print(names[2]) # 运行结果:Jack
字符串也可以通过索引获取特定的字符。
s = "Hello World"
print(s[0]) # 运行结果:H
print(s[3]) # 运行结果:l
print("Apple"[2]) # 运行结果:p
input函数输入的字符串也可以通过索引引用某个字符。
# 可以获取年份的最后一个字符
fourth = input('请输入年份:')[3]
print(fourth)
序列的索引如果是0或正整数,从左侧开始生成索引。如果是负数,从右侧开始生成索引,右侧第1个索引为-1,右侧第2个为-2,以此类推。
names = ["Bill", "Mary", "Jack"]
print(names[0]) # 运行结果:Bill
print(names[-1]) # 运行结果:Jack
print(names[-2]) # 运行结果:Mary
当索引超出序列的索引范围时,(注意:会抛出异常,后边的语句将不会执行了)。注意,得到序列的分片边界元素,可以允许超过1位边界。
names = ["Bill", "Mary", "Jack"]
print(names[4]) # 索引超出names序列的范围,将导致抛出异常
print(names[-4]) # 索引超出names序列的范围,将导致抛出异常
示例:输入年份将月份显示为中文月份。
# 将中文月份放到序列中
months = [
'一月',
'二月',
'三月',
'四月',
'五月',
'六月',
'七月',
'八月',
'九月',
'十月',
'十一月',
'十二月'
]
year = input("年:") # 输入年
month = input('月(1-12):') # 输入月
day = input('日(1-31):') # 输入日
monthNumber = int(month) # 将字符串形式的月转换为数值形式的月
monthName = months[monthNumber - 1] # 从序列中获取中文的月份
print(year + "年 " + monthName + " " + day + "日") # 按指定格式输入年月日
4.2.2 分片
分片操作就是从序列A中获取一个子序列B,则序列A为父序列。获取子序列B时需要在A序列中指定开始和结束的索引。
父序列索引方式1:0,1,2, … , n-1 # 左闭右开
父序列索引方式2:-n,-(n-1), … , -2, -1 # 左闭右开
# 索引的生成两种方向(左右),索引的选取[左闭右开] ,子索引边界(取反或省略(或+1))
url = 'https://geekori.com'
print(url[8:15]) # 运行结果:geekori
print(url[8:-1]) # 不能获取最后一个元素
print(url[8:18]) # 不能获取最后一个元素
print(url[8:0]) # 不能获取最后一个元素,会得到一个空序列[]
print(url[8:19]) # 运行结果:geekori.com ,19为父索引超范围边界,获取最后一个元素
print(url[8:]) # 获取最后一个元素
print(url[-3:-2]) # 负索引
print(url[-3:-1]) # 不能获取最后一个元素
print(url[-3:18]) # 不能获取最后一个元素
print(url[-3:0]) # 不能获取最后一个元素,会得到一个空序列[]
print(url[-3:19]) # 获取最后一个元素
print(url[-3:]) # 获取最后一个元素
print(url[:5]) # 获取前5个元素
print(url[5:]) # 获取前6个元素之后的所有元素
print(url[:-5]) # 获取后5个元素之前的所有元素
print(url[-5:]) # 获取后5个元素
print(url[:]) # 复制整个父序列
设置步长为0,会抛出异常。默认步长为1,可以设置第三个参数改变默认步长。正步长从左到右选择输出元素,负步长从右到左选择输出元素。
url = 'https://geekori.com'
# 正步长从左到右选择输出
print(url[8:15:2])
print(url[8:-1:2])
print(url[8:18:2])
print(url[8:0:2])
print(url[8:19:2])
print(url[8::2])
print(url[:5:2])
print(url[5::2])
print(url[:-5:2])
print(url[-5::2])
print(url[::2])
# 负步长从右到左选择输出
print(url[-3:-2:-2])
print(url[-3:-1:-2])
print(url[-3:18:-2])
print(url[-3:0:-2])
print(url[-3:19:-2])
print(url[-3::-2])
print(url[:5:-2])
print(url[5::-2])
print(url[:-5:-2])
print(url[-5::-2])
print(url[::-2])
示例:两行错位显示1-n中的奇数和偶数
url = input("请输入一个Https网址:")
scheme = url[0:5] # 分片获取Url中的Scheme
host = url[8:] # 分片获取Url中的Host
print("scheme:", scheme)
print("host:",host)
str = input("请输入一个整数:")
n = int(str);
numbers = range(1,n) # 产生包含1到n的数值类型的序列(有序的)
numbers1 = numbers[0::2] # 分片获取序列中的奇数,值与索引恰好奇偶相反
numbers2 = numbers[1::2] # 分片获取序列中的偶数,值与索引恰好奇偶相反
for number in numbers1: # 在第1行输出所有的奇数
print(number, end= " ")
print("") # 换行
print(" ",end="") # 错位
for number in numbers2: # 在第2行错位输出所有的偶数
print(number, end= " ")
4.2.3 序列相加
序列的相加并不是序列的元素值相加,而是序列的首尾相接。字符串属于字符序列,所以字符串相加也可以看做序列相加。但一个字符串不能和一个序列相加,否则会抛出异常。
print([1,2,3]+[4,5,6]) # 1,2,3,4,5,6
print("hello" + "world") # helloworld
print(["hello"] + [1,2,3]) # hello,1,2,3
print("hello" + [1,2,3]) # 字符串不能与序列相加,抛出异常
4.2.4 序列相乘
如果用一个数字n乘以一个序列将会产生一个新的序列,新的序列将会被重复n次。
print("ufo " * 5) # ufo ufo ufo ufo ufo
print([20] * 5) # 20,20,20,20,20
print([None] * 5) # None,None,None,None,None
用序列生成一个二维序列,由空格和星号元素组成,星号将会拼接成一个正三角型。
spaceNum = 5
i = 1
lineSpaceNum =spaceNum # 表示当前行的前后空格数
triangle = [] # 二维列表
# 开始生产三角形
while lineSpaceNum >= 0:
# 生成星号左侧空格列表
leftSpaceList = [' '] * lineSpaceNum
# 生成星号列表
starList = ['*'] * (2 * i - 1)
# 生成星号右侧空格列表
rightSpaceList = [' '] * lineSpaceNum
# 生成每一行的列表
lineList = leftSpaceList + starList + rightSpaceList
triangle.append(lineList)
lineSpaceNum -= 1
i += 1
for line in triangle:
print(line)
4.2.5 检查某个值是否属于一个序列
为了检查某个值是否属于一个序列,可以使用in运算符。如果属于返回True,否则返回False。
str = 'I love you'
print("you" in str)
print("hello" in str)
names = ["AA","BB","CC"]
print("AA" in names)
print("DD" in names)
验证用户是否登录成功。
account = [ # 保存了多条用户记录的序列
["geekori", "123456"],
["bill", "54321"],
["superman", "65432"],
["androidguy","6543"],
["mike435", "65abcd"]
]
username = input("用户名:") # 要求输入用户名
password = input("密码:") # 要求输入密码
# 用in运算符判断一个序列是否属于account
if [username, password] in account:
print("登录成功")
else:
print("登录失败")
4.2.6 序列的长度、最大值和最小值
len函数可以测得序列的长度,max函数和min函数可以测得元素的最大值和最小值。如果序列中的值不可比较将会抛出异常,例如,同时存在字符串和数值。
s = ["Bill", "Mike", "John"]
s[-1] = "Mary" # 修改列表最后一个元素值
print(s) # 运行结果:['Bill', 'Mike', 'Mary']
s[3] = "Peter" # 索引3超出了列表s的索引范围(-3到2),会抛出异常
s[-3] = "蜘蛛侠" # 索引-3是列表s的第1个元素,相当于s[0]
print(s) # 运行结果:['蜘蛛侠', 'Mike', 'Mary']
s[-4] = "钢铁侠" # 索引-4超出了列表s的索引范围(-3到2),会抛出异常