序列
- 序列⽤于保存⼀组有序的数据,所有的数据在序列当中都有⼀个唯⼀的位置(索引),并且序列中的数据会按照添加的顺序来分配索引。
序列的分类
- 可变序列(序列中的元素可以改变):如 列表(list)
- 不可变序列(序列中的元素不能改变):如 字符串(str)、元组(tuple)
列表
-
列表中可以保存多个有序的数据
-
列表是⽤来存储对象的对象
- 列表的创建:
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
list1 = [1, 2, 3, 4, 5 ]
切片
-
获取列表中指定的元素
-
语法:list[起始位置: 终点位置: 步长]
-
起始位置:空时默认为 0
-
终点位置:则从当前的开始位置⼀直截取到最后
-
如果开始位置和结束位置都省略, 则会从第⼀个元素开始截取到最后⼀个元素
-
如果开始位置和结束位置都省略, 则则会从第⼀个元素开始截取到最后⼀个元素
-
步长:表示每次获取元素的间隔,空时默认为 1,不能为 0
列表操作符
- 列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
嵌套列表
- 嵌套列表即在列表里创建其它列表,例如:
>>>a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'
修改列表
- 修改单个元素
直接对元素赋值即可
nums = [40, 36, 89, 2, 36, 100, 7]
nums[2] = -26 #使用正数索引
nums[-3] = -66.2 #使用负数索引
- 修改一组元素
nums = [40, 36, 89, 2, 36, 100, 7]
#修改第 1~3 个元素的值
nums[1: 4] = [45.25, -77, -52.5]
运行结果:
[40, 45.25, -77, -52.5, 36, 100, 7]
nums = [40, 36, 89, 2, 36, 100, 7]
#在4个位置插入元素
nums[4: 4] = [-77, -52.5, 999]
print(nums)
运行结果:
[40, 36, 89, 2, -77, -52.5, 999, 36, 100, 7]
- 如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素
s = list("Hello")
s[2:4] = "XYZ"
print(s)
运行结果:
[‘H’, ‘e’, ‘X’, ‘Y’, ‘Z’, ‘o’]
- 也可以指定步长(step 参数),但要求所赋值的新元素的个数与原有元素的个数相同
nums = [40, 36, 89, 2, 36, 100, 7]
#步长为2,为第1、3、5个元素赋值
nums[1: 6: 2] = [0.025, -99, 20.5]
print(nums)
运行结果:
[40, 0.025, 89, -99, 36, 20.5, 7]
列表的函数与方法
for循环遍历
- for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串
>>>languages = ["C", "C++", "Perl", "Python"]
>>> for x in languages:
... print (x)
...
C
C++
Perl
Python
>>>
range()函数
- 遍历数字序列,可以使用内置range()函数。它会生成数列
>>>for i in range(5):
... print(i)
...
0
1
2
3
4
- 使用range指定区间的值:
>>>for i in range(5,9) :
print(i)
5
6
7
8
- range以指定数字开始并指定不同的增量(甚至可以是负数,也叫做’步长’)
>>>for i in range(-10, -100, -30) :
print(i)
-10
-40
-70
- 可以结合range()和len()函数以遍历一个序列的索引
>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
作业
- 实现列表反转
# 现在有a=[1,2,3,4,5,6]用多种方式实现列表的反转([6,5,4,3,2,1])并写出推导过程
list = [1,2,3,4,5,6]
list.reverse() #第一种方法
print(list)
list.sort(reverse=True) #第二种方法
print(list)
print(list[::-1]) #第三种方法
- 给用户9次机会 猜1-10个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
import random
i=1
while 1<10:
num=int(input('请输入一个1-9的数字:'))
com=random.randint(1,10)
if com==num:
break
print('未猜中!,你第{}次猜测的数字是{},电脑随机数字是{}'.format(i,num,com))
i=i+1
- 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
lst3=[]
for i in range(len(lst1)):
if lst1[i] in lst2:
lst3.append(lst1[i])
print(lst3)
- 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
import random
teachers=[1,2,3,4,5,6,7,8]
b=[[],[],[]]
for teacher in teachers:
room=random.randint(0,2)
b[room].append(teacher)
print(b)
- 要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入。
用户名长度6-20,用户名必须以字母开头
密码长度至少6位,不能为纯数字,不能有空格
str1=input('请输入用户名: ')
str2=input('请输入密码: ')
while len(str1)<6 or len(str1)>20:
print('用户名长度为6-20,请重新输入!')
str1=input('请输入用户名: ')
while str1[0].isalpha() == 0:
print('用户名必须以字母开头!')
str1=input('请输入用户名: ')
while len(str2)<6:
print('密码不能少于6位!')
str2=input('请输入密码: ')
else:
while ' ' in str2 or str2.isdigit() == 1:
print('密码不能为纯数字,不能有空格!')
str2=input('请输入密码: ')
else:
print('密码符合规则')