[Python] 纯文本查看 复制代码
#第四章 列表
#4.1列表是一个值,[]是它起止的标志,想字符串中''标志着字符的起止一样,体现形式也是['a','b','c','d'],也可以是[]空列表
#列表的取值:
'''
a=['a','b','c','d']
a[1]='a'
a[2]='b'
a[3]='c'
a[4]='d'
print('hello,'+a[0]) #列表中括号中的数字代表列表的第几个元素,数字超出范围将报错,数字只能是整数
'''
'''
a=['a','b','c','d'],[1,2,3]
a=[0] #输出['a','b','c','d'],直接输出第0个列表
a[0][2] #输出c,表示第0个列表中的第2个值
'''
'''
a=['a','b','c','d'] #负数也可以参与抽取
a=[-1] #输出d,第-1位就是倒数第一个
'''
'''
#利用切片取得部分列表 #切片中第二个值不予显示,是<+,>的关系
a=['a','b','c','d']
a[0:4] #输出['a','b','c','d']
a[1:3] #输出['b','c']
a[0:-1] #输出['a','b','c',]
a=['a','b','c','d'] #切片中0元素可以省略
a[:2] #输出['a','b']
a[1:] #输出['b','c','d']
a[:] #输出['a','b','c','d']
'''
#len()可以取得列表中元素的总数
'''
a=['li','looo','eff','ggg','hhhf']
len(a) #输出5,输出元素的个数
a=['li','looo','eff','ggg','hhhf']
a[1]='hhhhh' #此时,a列表已经变成了['li','hhhhh','eff','ggg','hhhf']
a=['li','looo','eff','ggg','hhhf']
a[1]=a[2]
#此时,a列表已经变成了['li','eff','eff','ggg','hhhf']
a=['li','looo','eff','ggg','hhhf']
a[1]=2 #此时,a列表已经变成了['li','eff','2','ggg','hhhf']
#列表可以像字符串一样加减
['li','looo','eff','ggg','hhhf']+['a','b','c','d'] #输出['li','looo','eff','ggg','hhhf','a','b','c','d']
['a','b','c','d']*3 #输出['a','b','c','d','a','b','c','d','a','b','c','d']
#列表元素的删除
a=['li','looo','eff','ggg','hhhf'] #输出a=['li','looo','ggg','hhhf']
del a[2]
'''
#4.2利用列表:列表的作用是储存变量,如果你编程中需要很多变量,可以用列表储存,并且更容易增删改查
'''
catname1='1' #如果数量改变,需要修改等会非常麻烦
catname2='2'
catname3='3'
catname4='4'
catname5='5'
'''
'''
#改进
print('输入猫1的名字:')
catname1=input()
print('输入猫2的名字:')
catname2=input()
print('输入猫3的名字:')
catname3=input()
print('输入猫4的名字:')
catname4=input()
print('输入猫5的名字:')
catname5=input()
print('猫的名字是:')
print(catname1+' '+catname2+' '+catname3+' '+catname4+' '+catname5)
'''
'''
#再改进
catnames=[] #猫的名字列表
while True: #启用while循环
print('请输入猫的名字'+str(len(catnames))+'(或者输入"N"以停止') #输出猫的名字列表的数字
names=input() #输入名字
if names=='': #如果是空就结束程序
break
catnames=catnames+[names]
print('猫的名字是')
for names in catnames:
print(names)
'''
#列表中的循环:以下程序可以有效的将一个列表里的值提取出来
'''
list=['aa','bb','cc','dd','ee','ff','gg']
for i in range(len(list)):
print('在该列表中指引出第'+str(i)+'个值是'+list[i])
'''
'''
#in和not in
mypet=['aa','bb','cc','dd']
print('请输入你的宠物名字')
name=input()
if name not in mypet:
print('我这里没有你的宠物')
elif name in mypet:
print('你的宠物在这里')
'''
'''
#多重赋值技巧:这个小技巧赋值的数量必须和列表的长度相等
cat=['f','fa','fat'] #这种形式过于缓慢
a=cat[0]
b=cat[1]
c=cat[2]
cat=['f','fa','fat'] #这种会更快
0,1,2=cat
#enumerte函数与列表搭配使用,每次可以返回两个值
cat=['f','fa','fat']
for index,item in enumerate(cat):
print('指引出'+str(index)+'在列表里'+item)
'''
'''
#random.choies():选择列表中的一个和random.shuffle():给列表重新排序 与列表联用
import random
cat=['f','fa','fat']
print(random.choice(cat))
print(random.choice(cat))
print(random.choice(cat))
'''
'''
import random
ren=['f','fa','fat']
random.shuffle(ren)
print(ren)
'''
'''
#4.3增强赋值语句:a=a+1 a+=1其他操作符雷同
#4.4方法
#用index查找值
ren=['f','fa','fat'] #可以返回列表中值所在的位置
print(ren.index('f'))
'''
'''
#用append()和insert()在列表中添加值 这个方法只能用于同格式之间的添加
ren=['f','fa','fat'] #用append从列表里添加一个值
ren.append('fat')
print(ren)
ren=['f','fa','fat'] #在某某位置增加一个值
ren.insert(1,'chaa')
print(ren)
'''
'''
#用remove()删除值 如果知道名字删除,用remove很好用,如果知道位置,就用del删除
ren=['f','fa','fat']
ren.remove('f')
print(ren)
ren=['f','f','fa','fat'] #如果有重复值,remove只能删除一个
ren.remove('f')
print(ren)
'''
'''
#用soft给列表排序
a=[2,3,4,7,8,-1,-6] #默认从小到大
a.sort()
print(a)
a=[2,3,4,7,8,-1,-6]
a.sort(reverse=True) #添加reverse=True条件以倒叙
print(a)
a=['a','d','b','c','g'] #默认从A到Z
a.sort()
print(a)
a=['a','A','C','c','g','G'] #添加条件实现控制大小写
a.sort(key=str.lower)
print(a)
'''
'''
#使用severse()翻转列表中的值
a=['a','d','b','c','g']
a.reverse()
print(a)
'''
#4.5
#4.6序列数据类型 列表不是唯一表示序列值的数据类型
'''
name='zooopoz'
print(name[0])
print(name[-3])
print(name[0:3])
for i in name:
print('*****+'+i+'*****')
'''
#列表中的元素更改的,'字符串'是不可更改的,不能对字符串里的元素进行赋值
#如果想使用新的字符串,必须赋值一个新的变量,利用切片和连接重新赋值一个变量,而列表被重新赋值时会直接替换
'''
name='have a cat'
newname=name[0:4]+' the '+name[7:10]
print(newname)
'''
'''
#元组数据类型:和列表有两点不同,第一点是用()表示,第二点是不可以任意增删改里边的元素,其余的部分几乎和列表一样
#使用元组比使用列表运行快,另外,如果元组中只有一个元素,你可以在元素后边加一个逗号,告知系统这是一个元组
#你可以用list()和tuple()实现元组和列表的转换
#4.7引用:引用修改变量的值时,每个变量不会受影响,引用修改列表的值时,列表会全部改变
a=50 #给a赋值50:计算机创造了50的值
b=a #给b赋值到a:计算机把50再次分配到了b
a=100 #当我们改变a的值,b的值不受影响
print(a)
print(b)
a=['a','A','C','c','g','G'] #创建了列表a
b=a #给b赋值等同于a的列表
b[2]='hello' #改变b列表的字符
print(a) #ab对应的列表都发生了改变
print(b)
'''
#4.7.1 标识和id()函数:可以使用id()命令来输出字符串或变量在系统中的编号
#4.7.2 传递引用
#4.7.3 copy模块和copy()和deepcopy()函数
'''
import copy
a=['A','B','C','D']
print(id(a))
b=copy.copy(a)
print(id(b))
b[1]='hello'
print(b)
'''
'''
#4.8小程序:C的生命游戏,这个研究了很久,这个程序对新手真的不友好。
import random,time,copy
kuandu=60
gaodu=20
#创建一个格子的列表
nextcell=[]
for x in range(kuandu):
lie=[]
for y in range(gaodu):
if random.randint(0,1)==0:
lie.append('#')
else:
lie.append(' ')
nextcell.append(lie)
while True:
print('\n\n\n\n\n\n')
bianhuacell=copy.deepcopy(nextcell)
#输出与效果呈现
for y in range(gaodu):
for x in range(kuandu):
print(bianhuacell[x][y],end=' ')
print()
for x in range(kuandu): #书中这个地方缩进有错误
for y in range(gaodu):
leftcoord=(x-1)%kuandu
rightcoord=(x+1)%kuandu
abovecoord=(y-1)%gaodu
belowcoord=(y+1)%gaodu
numlinju=0
if bianhuacell[leftcoord][abovecoord]=='#':
numlinju+=1
if bianhuacell[x][abovecoord]=='#':
numlinju+=1
if bianhuacell[rightcoord][abovecoord]=='#':
numlinju+=1
if bianhuacell[leftcoord][y]=='#':
numlinju+=1
if bianhuacell[rightcoord][y]=='#':
numlinju+=1
if bianhuacell[leftcoord][belowcoord]=='#':
numlinju+=1
if bianhuacell[x][belowcoord]=='#':
numlinju+=1
if bianhuacell[rightcoord][belowcoord]=='#':
numlinju+=1
if bianhuacell[x][y]=='#'and(numlinju==2or numlinju==3):
nextcell[x][y]='#'
elif bianhuacell[x][y]==' 'and numlinju==3:
nextcell[x][y]='#'
else:
nextcell[x][y]=' '
time.sleep(1)
'''