Python 列表和元组
- 类似C语言的数组:
- 列表
- 列表的类型(list):
- 列表的添加
- 列表的删除
- 列表的分片(拷贝) ':'
- 列表的拼接
- 列表的比较
- 列表的多次增加(同一个数据)
- 列表的查找
- 列表的翻转:reverse()
- 列表的从小到大自动排列 sort()
- 列表的从大到小自动排列 reverse()
- 列表和元组的区别:
- 元组
- 元组的类型 (tuple)
- 创建单个元组
- 元组的多次增加(同一个数据)
- 元组的增加
- 元组的删除
- 序列:
- list() 变列表
- tuple() 变元组
- str() 变字符串
- len() 计算长度
- max() 返回最大值
- min() 返回最小值
- sum() 返回总和
- sorted() 从小到大
- reversed() 翻转数据
- enumerate() 加序号
- zip() 双方结合
- count() 计算字符/字符串 在字符串中出现多少次
- 模块学习:random模块
类似C语言的数组:
列表
列表的类型(list):
普通列表:
string = ['小明','小王','小李','玛卡巴卡']
print(string)
输出结果:['小明', '小王', '小李', '玛卡巴卡']
混合列表:
string = ['小明','hello',666,'玛卡巴卡']
print(string)
输出结果:['小明', 'hello', 666, '玛卡巴卡']
空列表:
string = []
print(string)
输出结果:[]
列表的添加
添加单个列表:append()
都是只能在末尾加入
string = ['小明','hello',666,'玛卡巴卡']
#添加一个 吧唧吧唧
string.append('吧唧吧唧')
输出结果:['小明', 'hello', 666, '玛卡巴卡', '吧唧吧唧']
添加多个列表:extend()
都是只能在末尾加入
string = ['小明','hello',666,'玛卡巴卡']
#添加三个 吧唧吧唧 和 阿巴阿巴 咔叽咔叽
string.extend(['吧唧吧唧','阿巴阿巴','咔叽咔叽'])
print(string)
#注意: 记得 加个[] 每个用逗号 隔开
输出结果:['小明', 'hello', 666, '玛卡巴卡', '吧唧吧唧', '阿巴阿巴', '咔叽咔叽']
插入一个列表 位置自定 insert()
可以随意位置插入新的
头插法
string = ['小明','hello',666,'玛卡巴卡']
#我想插入 嘎嘎嘎 到 第一那里
string.insert(0,'嘎嘎嘎') #是从0开始的哈
print(string)
输出结果:['嘎嘎嘎', '小明', 'hello', 666, '玛卡巴卡']
中间插法
string = ['小明','hello',666,'玛卡巴卡']
#我想插入 嘎嘎嘎 到 666 的后面 那么我们看666是第3 个
string.insert(3,'嘎嘎嘎') #下标是从0开始算的哈
print(string)
输出结果:['小明', 'hello', 666, '嘎嘎嘎', '玛卡巴卡']
尾插法
string = ['小明','hello',666,'玛卡巴卡']
#我想插入 嘎嘎嘎 到 列表的最后 首先我们发现我们列表有4个数据, 那就是应该是插入4 记住下标是从0开始的
string.insert(4,'嘎嘎嘎') #下标是从0开始算的哈
print(string)
输出结果:
['小明', 'hello', 666, '玛卡巴卡', '嘎嘎嘎']
在已有的数据 我想互调位置
需要建立一个 ‘空房间’ 来暂时存放一小会。
string = ['小明','hello',666,'玛卡巴卡']
#我想让 玛卡巴卡 和小明 互换一下位置
#首先 你得知道 小明 是在 string[0] 那里 玛卡巴卡 是在string[3]那里
#不妨打印一下
print(string[0]) #小明
print(string[3]) #玛卡巴卡
#互换 先把 小明扔进一个 ‘空房间’ 然后把 玛卡巴卡 放到 第一个string[0]里面 然后 把 在空房间的 小明 给到 string[3]
empty_room = string[0] #把小明扔进空房间
string[0] = string[3] #把玛卡巴卡 放到 第一个 string[0]
string[3] = empty_room #再把房间的小明放在 第四个位置 string[3]
print(string)
输出结果:
小明
玛卡巴卡
['玛卡巴卡', 'hello', 666, '小明']
列表的删除
通过名字来删除 remove()
string = ['小明','hello',666,'玛卡巴卡']
#我想删除 666
string.remove(666)
print(string)
输出结果:['小明', 'hello', '玛卡巴卡']
#不知道名字 你输入的名字 列表中没有则报错的
**通过下标来删除 或 整个列表删除 del **
string = ['小明','hello',666,'玛卡巴卡']
#我想删除 666
del string[2]
print(string)
输出结果:['小明', 'hello', '玛卡巴卡']
#整个列表删除:
del string
在列表移最后一个数据出来 并且我可以用它去做别的 pop()
string = ['小明','hello',666,'玛卡巴卡']
#我想移玛卡巴卡出来 并且给 name 叫 玛卡巴卡
name = string.pop() #把string最后一个数据 玛卡巴卡 移出来 给 name 当名字
print(string) #打印列表 玛卡巴卡 没了
print('name:',name) # 打印name 是不是 叫玛卡巴卡
输出结果:
['小明', 'hello', 666]
name: 玛卡巴卡
列表的分片(拷贝) ‘:’
我想吧列表拷贝一份给别人(全部拷贝)
string = ['小明','hello',666,'玛卡巴卡']
#我想拷贝一份 给我的 Boss
Boss = string[:]#把列表string所有内容给我的Boss
#Boss = string[0:4] #把列表string所有内容给我的Boss 这个是一样的效果
print(Boss) #打印Boss 的列表
print(string) #原有的列表也还在的
输出结果:
['小明', 'hello', 666, '玛卡巴卡']
['小明', 'hello', 666, '玛卡巴卡']
我想吧列表拷贝一份给别人(部分拷贝)
string = ['小明','hello',666,'玛卡巴卡']
#我想拷贝一份 给我的 Boss
Boss = string[2:3]#把列表string 666 内容给我的Boss
print(Boss) #打印Boss 的列表
print(string) #原有的列表也还在的
输出结果:
[666]
['小明', 'hello', 666, '玛卡巴卡']
其实不拷贝也行,但是他们的数据是同步的 比如string 内容 给了 Boss 如果string 内容变了,那么Boss的内容也是跟着变的 就直接理解成其实是同一个文件,只不过string和Boss都能看。
只是Boss 也指向了 string 这个内容
string = ['小明','hello',666,'玛卡巴卡']
#我想直接给一份 给我的 Boss 注意 这里是没有拷贝哦
Boss = string #把列表string所有内容给我的Boss
print(Boss) #打印Boss 的列表
print(string) #原有的列表也还在的
print('------------修改了string之后-----------')
#如果我修改了string的内容 比如删除了玛卡巴卡
string.remove('玛卡巴卡')
print(string)
print(Boss)
输出结果:
['小明', 'hello', 666, '玛卡巴卡']
['小明', 'hello', 666, '玛卡巴卡']
------------修改了string之后-----------
['小明', 'hello', 666]
['小明', 'hello', 666]
#我们只修改了string 但是Boss 也跟着了
列表的拼接
必须都是列表
list1 = ['hello']
list2 = ['world']
list_new = list1 + list2 #两个列表进行拼接 注意得都是列表
print(list_new)
输出结果:['hello', 'world']
列表的比较
**比较的符号: > < >= <= **
list1 = [123,456]
list2 = [124,456]
如何比较的 第一次看大家都是1 再 第二位字符 都是2 再看 第三位字符 3 > 4 吗? 很显然不是 所以 是 False
value = list1 > list2 #比较
print(value)
输出结果: False
list1 = [123,456]
list2 = [124,456]
list3 = [888,888]
print((list1 >= list2) or (list1 < list3)) # or 是表示 或者的意思
输出结果:True
列表的多次增加(同一个数据)
乘 就完事了
list1 = [123,456]
print(list1 * 3) #打印3次 列表变成6个了
输出结果: [123, 456, 123, 456, 123, 456]
列表的查找
查找有无有
想找的内容 in 列表 或者 想查的内容 not in 列表*
list1 = [123,456,'小明','玛卡巴卡','Boss']
#我想查找一下有没有这个Boss
print('Boss' in list1)
输出结果:True #很明显是有的哈
list1 = [123,456,'小明','玛卡巴卡','Boss']
#我想查找一下有没有这个666
print(666 in list1)
输出结果:False #列表没有666
#列表里面 又有个列表
list1 = [123,456,'小明','玛卡巴卡','Boss',['大大','小小']]
#我想查找一下有没有这个 大大
print('大大' in list1)
输出结果: False
得必须
print('大大' in list1[5])
输出结果:True
查找出现了多少次 count(查找的字符)
返回出现查找字符的拥有的次数。
list1 = [123,123,'小明','玛卡巴卡','Boss',['大大','小小']]
#我想查找一下123 有多少个
print(list1.count(123))
输出结果:2
查找在哪里出现 index()
index(查找的字符)
index(查找的字符,从哪里开始找,哪里结束)
返回:返回在第几个下标找到的
list1 = [123,123,'小明','玛卡巴卡',123,['大大','小小']]
#我想查找一下123 在哪里出现了 只能找1个
print(list1.index(123))
输出结果: 0
list1 = [123,123,'小明','玛卡巴卡',123,['大大','小小']]
#我想查找一下123 从第下标为2开始找 到下标为5 看看123在列表的第几个
print(list1.index(123,2,5))
输出结果: 4
列表的翻转:reverse()
**把第一个和最后一个互换 第二个和 倒数第二互换 第三个和倒数第三…
list1 = [123,123,'小明','玛卡巴卡',123,['大大','小小']]
#我想查找一下123 在哪里出现了 只能找1个
list1.reverse() #这个你不能定义个变量去 接收数据 比如: x = list1.reverse()
print(list1) #打印不能print(list1.reverse()) 这样 得分步走
输出结果:[['大大', '小小'], 123, '玛卡巴卡', '小明', 123, 123]
列表的从小到大自动排列 sort()
list1 = [9,5,6,2,7,8,1,3,4,10]
#从小到大排列
list1.sort()
print(list1)
输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表的从大到小自动排列 reverse()
我们可以通过上面的 reverse() 翻转一下就是从大到小了
list1 = [9,5,6,2,7,8,1,3,4,10]
#从小到大排列
list1.sort() #变成 从小到大
list1.reverse() #翻转一下 变成从大到小
print(list1)
输出结果:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
嫌弃麻烦就这样吧
list1 = [9,5,6,2,7,8,1,3,4,10]
#从大到小排列
list1.sort(reverse=True)
print(list1)
列表和元组的区别:
1.类型不一样 列表是 list 元组是 tuple
2.列表 可改内容 元组不可直接更改(但是也是有办法的-切片的方法(拷贝))
3.列表是用[]表示 元组是用() 以及 ‘,’
元组
元组的类型 (tuple)
普通元组
tuple1= ('小明','小王','小李','玛卡巴卡')
print(tuple1)
输出结果:('小明', '小王', '小李', '玛卡巴卡')
混合元组:
tuple1 = ('小明','hello',666,'玛卡巴卡')
print(tuple1)
输出结果:('小明', 'hello', 666, '玛卡巴卡')
空列表:
tuple1 = ()
print(tuple1)
print(type(tuple1)) #通过type() 查看类型
输出结果:()
<class 'tuple'>
创建单个元组
注意:如果想创建一个 单元素 tuple1 = (1) 不是元组类型 是整形
tuple1 = (1)
print(tuple1)
print(type(tuple1))
输出结果:1
<class 'int'>
正确的是: 加个逗号
tuple1 = (1,)
print(tuple1)
print(type(tuple1))
输出结果:(1,)
<class 'tuple'>
也可以这样:
tuple1 = 1,
print(tuple1)
print(type(tuple1))
输出结果:(1,)
<class 'tuple'>
元组的多次增加(同一个数据)
跟列表一样的 乘就完事了
tuple1 = 3 * (1,)
print(tuple1)
输出结果: (1, 1, 1) #元组变成3 个 了
没有括号 乘 是有区别的
tuple1 = 3 * 1,
print(tuple1)
输出结果: (3,) #变成了直接 元组那个数据乘3 的得数了
元组的增加
头插法
tuple1 = ('小明','hello','玛卡巴卡',888)
#我想增加一个 吧唧吧唧 在 元组的第一个
#首先 把 原有的 拷贝给 吧唧吧唧 再 + tuple1 吧唧吧唧 记得 写成元组的形式 括号+逗号
tuple1 = ('吧唧吧唧',) + tuple1[0:4]
print(tuple1)
输出结果:('吧唧吧唧', '小明', 'hello', '玛卡巴卡', 888)
中间插法
tuple1 = ('小明','hello','玛卡巴卡',888)
#我想增加一个 吧唧吧唧 在 元组的中间插入、也就是 hello 的后面(第三个)
#首先 把 前两个先 拷贝给 tuple1 再 + 吧唧吧唧 再 + 元组后两个
# 记得 写成元组的形式 括号+逗号
tuple1 = tuple1[0:2] + ('吧唧吧唧',) + tuple1[2:4]
print(tuple1)
输出结果:('小明', 'hello', '吧唧吧唧', '玛卡巴卡', 888)
尾插法
tuple1 = ('小明','hello','玛卡巴卡',888)
#我想增加一个 吧唧吧唧 在 元组的最后
#首先 把 原有的 拷贝给 tuple1 + 吧唧吧唧 吧唧吧唧 记得 写成元组的形式 括号+逗号
tuple1 = tuple1[0:4] + ('吧唧吧唧',)
print(tuple1)
输出结果:('小明', 'hello', '玛卡巴卡', 888, '吧唧吧唧')
我们通过拷贝的方式 又叫tuple1 指向 拷贝完的内容 原来的其实是会自动消失的,因为没有变量指向它了。
元组的删除
del 数组名字。。。。正常很少这么干。一般都报错 目前没学到有什么好的办法
序列:
list() 变列表
string1 = "hello world" #字符串
string2 = (1,2,3,4,5,9999,123) #元组
print(list(string1))
print(list(string2))
输出结果:['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
[1, 2, 3, 4, 5, 9999, 123]
tuple() 变元组
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
(1, 2, 3, 4, 5, 9999, 123)
输出结果:('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
(1, 2, 3, 4, 5, 9999, 123)
str() 变字符串
string1 = [1,'玛卡巴卡',2,'hhhhh',555] #;列表
string2 = (1,2,3,4,5,9999,123)#元组
string1 = str(string1)
string2 = str(string2)
print(string1)
print(string2)
print(type(string1))
print(type(string2))
输出结果:
[1, '玛卡巴卡', 2, 'hhhhh', 555]
(1, 2, 3, 4, 5, 9999, 123)
<class 'str'>
<class 'str'>
len() 计算长度
string = 'hello world'
print(len(string))
输出结果: 11
max() 返回最大值
返回序列或者参数中的最大值(数据类型得统一)
string = '123456789'
print(max(string))
输出结果:9
min() 返回最小值
(数据类型得统一)
string = '123456789'
print(min(string))
输出结果:1
sum() 返回总和
可返回值再加自定义值
类型不同 会报错
string = (1,2,3)
print(sum(string))
print(sum(string,10))
输出结果:6
16
sorted() 从小到大
string = (1,2,3)
print(sorted(string))
输出结果:[1, 2, 3]
reversed() 翻转数据
得加上list
string = (1,2,3)
print(list(reversed(string)))
输出结果:[3, 2, 1]
enumerate() 加序号
得加上list
string = (7,8,9)
print(list(enumerate(string)))
输出结果:[(0, 7), (1, 8), (2, 9)]
zip() 双方结合
如果没办法结和 直接丢弃
string1 = ['a','b','c'] #列表 元组都行
string2 = ('A','B','C')
print(list(zip(string1,string2)))
输出结果:[('a', 'A'), ('b', 'B'), ('c', 'C')]
count() 计算字符/字符串 在字符串中出现多少次
原型: count(sub[,start[,end]])
作用: 返回sub在字符中出现的次数 start 和 end 参数 可选 可不写。
string = 'HELLO WORLD'
number = string.count('L') #查找L 字符在 字符串出现了多少次 也可以查找字符串 'HE'啥的
print(number)
输出结果:3
模块学习:random模块
产生随机数:randint() 会返回随机的一个整数
可以设定多少到多少之间的值:
random.randint(1,10)
这就是表示产生1——10的随机数了。
那么我们可以就是 用刚的小练习 来产生一个随机 数
注意:得导入模块(import) 相当于C语言的 头文件吧
调用就是 random.randint(1,10)
import random #导入模块 用import
print('猜数字游戏,猜对了有奖')
number = random.randint(1,10) #设定随机数为1——10的数字
string = input('你输入0-10的数字,看看你有没有猜对: ')
value = int(string)
if value == number:
print('恭喜你猜对了')
else:
if value > number:
print('大了,大了')
else:
print('小了,小了')
while value != number:
string = input('猜错啦 再来一次吧 ')
value = int(string)
if value == number:
print('恭喜你猜对了')
else:
if value > number:
print('大了,大了')
else:
print('小了,小了')
print('游戏结果啦')