Python学习-列表、元祖和Range
记录一下元祖、列表和Range相关的知识。
列表
如果要表示多个事物,可以使用列表,它是一个容器型的数据类型,可以存储大量的数据,而且是任意类型的数据。对应java中就是数组,但是java数组的数据类型声明后必须一致,而python中列表的数据类型可以不一致。
公共操作
列表公共的操作方法可以参考字符串,也有如下操作方法。
(1)len
li=[1,2,'clyang',[1,2,3]]
# len
print(len(li)) # 4
(2)索引
可以使用索引来获取列表中的元素,索引下标从0开始算。从下面的结果可以看出,列表里可以有不同的数据类型。
li=[1,2,'clyang',[1,2,3]]
# 索引
print(li[0],type(li[0])) # 1 <class 'int'>
print(li[2],type(li[2])) # clyang <class 'str'>
print(li[-1],type(li[-1])) # [1, 2, 3] <class 'list'>
(3)切片
列表的切片和字符串一样,也是顾头不顾尾。
li=[1,2,'clyang',[1,2,3]]
# 切片,一样是顾头不顾尾
print(li[:2]) # [1, 2]
# 从最后一个元素开始,步长-1来取
print(li[-1::-1]) # [[1, 2, 3], 'clyang', 2, 1]
print(li[-1:-2:-1]) # [[1, 2, 3]]
print(li[-1:]) # [[1, 2, 3]]
# 切片练习
li=[1,3,2,"a",4,"b",5,"c"]
# 切片形成新的列表[1,3,2]
print(li[0:3])
# 切片形成新的列表["a",4,"b"]
print(li[3:6])
# 切片形成新的列表[3,"a","b"]
# 以下两种方式都可以,索引为6的元素和索引为-2的元素是同一个
print(li[1:6:2])
print(li[1:-2:2])
# 切片形成新的列表["b","a",3]
print(li[-3::-2])
(4)for循环
# for循环
li=['messi','ronald','herry']
for item in li:
print(item)
# 控制台
messi
ronald
herry
列表创建
列中的创建有三种方式,有直接创建、使用list()创建、列表推导式。其中使用list()方法创建需保证传入的参数是可以迭代的。
# 创建一个list
# 方式1 直接创建
li=[1,2,"messi",[1,2,3]]
print(li) # [1, 2, 'messi', [1, 2, 3]]
# 方式2 使用list()创建
li2=list("messi") # 参数必须是可迭代的
print(li2) # ['m', 'e', 's', 's', 'i']
li3=list([1,2,"messi",[1,2,3]])
print(li3) # [1, 2, 'messi', [1, 2, 3]]
# 方式3 列表推导式
li4=[x*3 for x in range(5)]
print(li4) # [0, 3, 6, 9, 12]
增删改查
(1)增
li=["messi","ronald"]
# 1 append 追加
li.append("herry")
print(li) # ['messi', 'ronald', 'herry']
# 列表的增,常见使用场景:人事输入人名,当按q或Q退出
# while 1:
# name=input("请输入人名,按Q或q退出")
# if name.upper()=="Q":
# break
# li.append(name)
#
# print(li)
# 2 insert 插入
li.insert(2,"kaka")
print(li) # ['messi', 'ronald', 'kaka', 'herry']
# 3 extend 迭代追加
li.extend(["zidane","gaolin"]) # 参数应该是可以迭代的
print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin']
# "abcd"可以迭代成a b c d
li.extend("abcd")
print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'd']
(2)删
注意如果是使用remove删除元素,并且列表中多个待删除的元素,则默认删除左边第一个。
clear删除的话,是全部清空。
del删除时,可以按照索引删除,也可以按照切片删除。
# 数据是上面操作完后的数据
li=['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'd']
# 1 按照索引位置删除
# 如果不指定索引号,默认删除最后一个元素
li.pop()
print(li) # ['messi', 'ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
# 删除第一个元素,返回被删除的元素
r=li.pop(0)
print(r) # messi
print(li) # ['ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
# 2 按照元素删除,如果列表中有多个被删除的元素,删除左边第一个
li.append("ronald")
print(li) # ['ronald', 'kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'ronald']
li.remove("ronald") # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c', 'ronald']
print(li)
# 3 清空列表
# li.clear()
# print(li) # []
# 4 使用del删除
# 按索引删除
del li[-1]
print(li) # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
# 按切片删除,顾头不顾尾
del li[-1:-4:-1]
print(li) # ['kaka', 'herry', 'zidane', 'gaolin']
(3)改
按照切片改。
# 按照无步长的切片
li=['kaka', 'herry', 'zidane', 'gaolin']
# li[4:]='abc'
# print(li) # ['kaka', 'herry', 'zidane', 'gaolin', 'a', 'b', 'c']
# 按有步长的切片改
li[::2]="ab"
# 步长为2来切,只有2个slice,如果是'abc'会形成三个序列,导致冲突
# li[::2]="abc" # 报错 attempt to assign sequence of size 3 to extended slice of size 2
print(li) # ['a', 'herry', 'b', 'gaolin']
按照索引改。
li=['kaka', 'herry', 'zidane', 'gaolin']
li[0]="clyang"
# 改完,第一个位置换成clyang
print(li) # ['clyang', 'herry', 'zidane', 'gaolin']
(4)查
可以通过索引查、切片查、for循环查。
# for循环查
for item in li:
print(item)
# 控制台
a
herry
b
gaolin
综合练习
下面使用列表的知识,对列表进行操作练习,第二个练习就是列表嵌套列表,稍微复杂一点。
# 练习1
l1 = [1, 2, 'taibai', [1, 'alex', 3,]]
# 1, 将l1中的'taibai'变成大写并放回原处。
# print(l1[2])
l1[2]=l1[2].upper()
print(l1) # [1, 2, 'TAIBAI', [1, 'alex', 3]]
# 2, 给小列表[1,'alex',3,]追加一个元素,'老男孩教育'。
l1[3].append('老男孩')
print(l1) # [1, 2, 'TAIBAI', [1, 'alex', 3, '老男孩']]
# 3, 将列表中的'alex'通过字符串拼接的方式在列表中变成'alexsb'
print(l1[3][1]) # alex
l1[3][1]=l1[3][1]+'sb'
print(l1) # [1, 2, 'TAIBAI', [1, 'alexsb', 3, '老男孩']]
# 练习2
lis=[2,30,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']
# 将列表中的tt变成大写
lis[3][2][1][0]=lis[3][2][1][0].upper()
lis[3][2][1][0]='TT'
print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
# 将列表中的数字3,变成字符串'100'
# lis[3][2][1][1]='100'
lis[3][2][1][1]=str(int(lis[3][2][1][1])+97)
print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', '100', '1']], 89], 'ab', 'adv']
# 将列表中的字符串1,变成数字101
# lis[3][2][1][2]=101
lis[3][2][1][2]=int(lis[3][2][1][2])+100
print(lis) # [2, 30, 'k', ['qwe', 20, ['k1', ['TT', '100', 101]], 89], 'ab', 'adv']
元祖
元祖,可以存储大量数据,数据只能读,不能改。当不想让别人改动的一些数据,就存放在元祖里,如个人信息,用户名密码等。
元祖可以使用切片、索引、for循环、拆包等。
元祖中,对列表类型的元素是可以修改的,但是对int、bool、str这种不可变数据类型,既不能修改也不能删除。
tu=(100,'messi',True,[1,2,3])
# 通过索引获取
print(tu[0]) # 100
print(tu[1]) # messi
# 切片
print(tu[2:]) # (True, [1, 2, 3])
print('----循环----')
for i in tu:
print(i)
# 控制台
----循环----
100
messi
True
[1, 2, 3]
# 查看长度
print(len(tu)) # 4
# 元素不可以改,但是元祖里的数组可以改
tu[-1].append(8848)
print(tu) # (100, 'messi', True, [1, 2, 3, 8848])
# 修改元祖
# tu[2]=False # 不能修改
print(tu)
# 删除元祖
# del tu[0] # 不能删除
print(tu)
# 元祖的拆包,分别赋值
a,b=(1,2)
print(a,b) # 1 2
c=a,b
print(c) # (1, 2)
Range
Range可以表示一定范围的数字,顾头不顾尾,并且可以指定步长。
(1)创建Range。
r = range(10)
print(r)
# 控制台
range(0, 10)
(2)循环打印,打印结果看出为"前包括后不包括"。
r = range(10)
for i in r:
print(i)
# 控制台
0
1
2
3
4
5
6
7
8
9
(3)可以使用索引。
print(r[0]) # 0
(4)Range可以指定步长。
# 打印50-1
for i in range(50, 0, -1):
print(i)
# 打印50之内的偶数
print('打印之内的偶数')
for i in range(0, 50, 2):
print(i)
(5)利用for循环+range+len,打印列表中所有的索引。
li = [1, 2, 3, 'alex', '太白', 'messi', 1, 2, 3]
# 这个方法常用
for index in range(len(li)):
print(index)
(6)经典面试题
Range切片后还是Range。
# 经典面试题
r = range(5)
print(r[1:3]) # range(1,3),而不是1,2
# 打印不出结果
for i in range(1, 5, -1):
print(i)
以上,是对列表、元祖和Range的记录,后续查看用。
参考博文:
(1)https://blog.csdn.net/u014612521/article/details/100159907