列表(list)
>>> a=[350,49.23,'锦到黑',103]
# 写在中括号里面,中间用逗号隔开,可以加任意的数据类型
>>> print(a)
[350, 49.23, '锦到黑', 103]
>>> print(a[3])
# 下标从0开始
103
>>> print(a[2])
锦到黑
>>> a[2]
'锦到黑'
>>> print(a[-1])
#倒序插入
103
>>> b=a[2:4]
# 左闭右开的区间
>>> print(b)
['锦到黑', 103]
>>> a[ :4]
# 只给右端点
[350, 49.23, '锦到黑', 103]
>>> a[2:]
# 只给左端点
['锦到黑', 103]
简易的诗词匹配题目
import random
questions =['白日依山尽,黄河入海流',
'所守或匪亲,化作狼与豺',
'春风桃李花开日,秋雨梧桐叶落时',
'冠盖满京华,斯人独憔悴',
'会当凌绝顶,一览众山小']
answers=['王之涣','李白','白居易','杜甫','杜甫']
# 列表可以分行书写
while 1==1 :
# ctrl+C 强制退出
i=random.randint(0,len(questions)-1)
#0到4闭区间
s=input('请输入' + questions[i] + '的作者:')
if s==answers[i]:
print('答对了')
else :
print('答错了!')
一些列表中的运算符
加号
加号可以用来合并两个列表,但不会改变a和b自身
>>> a=['你好','2020']
>>> b=['太难的一年']
>>> a+b
['你好', '2020', '太难的一年']
乘号
>>> a=['你好','2020']
>>> a*3
['你好', '2020', '你好', '2020', '你好', '2020']
打印列表中所有元素
用while
import random
questions =['白日依山尽,黄河入海流',
'所守或匪亲,化作狼与豺',
'春风桃李花开日,秋雨梧桐叶落时',
'冠盖满京华,斯人独憔悴',
'会当凌绝顶,一览众山小']
answers=['王之涣','李白','白居易','杜甫','杜甫']
# 列表可以分行书写
i=0
while i<len(questions):
print('题目:',questions[i])
i=i+1
用for循环
questions =['白日依山尽,黄河入海流',
'所守或匪亲,化作狼与豺',
'春风桃李花开日,秋雨梧桐叶落时',
'冠盖满京华,斯人独憔悴',
'会当凌绝顶,一览众山小']
for i in questions :
# 这里的i直接对应的列表中的数据,而不是作为列表的一个索引
print('题目:',i)
for语句读取的是列表数据,所以不能使用
i=i+1以2个步长跳转
Range
Range(m,n)
>>> a=range(3,7)
左闭右开,生成了列表,最后一项n-1
或者偷懒简化为
Range(n),从0到n-1的列表
for i in range(1,10,2):
print(i)
可以生成步长为2的序列
in操作符
可以用来判断元素是否在列表里面
not in,判断不在里面
answers=['李白','杜甫','白居易']
name=input('人名:')
if name in answers:
print('在里面')
else :
print('不在里面')
题目一
请在Python的交互式运行窗口中,完成以下步骤的操作:
手动创建一个列表并赋值给变量(比如x),内容为[17,13,23,3,2,5,11,7,19]。
使用切片操作,从该列表中截取第3个(下标为2)到第7个(编号为6)的片段,并赋值给另一个变量(比如y)。
将两个列表相加,观察结果(无需赋值给任何变量,直接相加即可)。
将第二个列表乘以4,观察结果。
使用Sum函数和Len函数计算第一个列表的平均值。
>>> x=[17,13,23,3,2,5,11,7,19]
>>> y=x[2:7]
>>> x+y
[17, 13, 23, 3, 2, 5, 11, 7, 19, 23, 3, 2, 5, 11]
>>> y=y*2
>>> print(y)
[23, 3, 2, 5, 11, 23, 3, 2, 5, 11]
>>> print(sum(x)/(len(x)+1))
# len后面要+1
10.0
>>>
题目二
请编写一个程序,能够自动从 “张三、李四、王五、赵六、田七、刘八” 中随机选择一个人,作为中奖者显示在屏幕上。代码要求如下:
使用列表存放人名,人名和数量可以自己随意安排。
尽可能让程序具备灵活性,比如向列表中添加、删除人名时,不需要修改与列表无关的代码。
有兴趣的同学可以搜索一下 random模块的choice函数,然后重写本程序。
import random
answers=['李白','杜甫','白居易']
a=random.randint(0,len(answers)-1)
print('获奖者是',answers[a])
请使用for循环和range扩充“练习2”中的抽奖程序,使之每次运行均能连续输出3个中奖者名字(允许一人重复获奖)。输出效果类似下面的形式:
1等奖:王五
2等奖:田七
3等奖:王五
import random
answers=['李白','杜甫','白居易','杜牧','李商隐']
for i in range(3):
a=random.randint(0,len(answers)-1)
print('获',i+1,'等奖者是',answers[a])
题目三
请编写程序,使之能够找出两个列表中共同存在的所有元素,并打印在屏幕上。这两个列表可以自己随意指定。
比如,假设在程序中定义了两个列表:[3,5,‘a’,10,9,‘b’] 和 [‘c’,4,3,‘a’] ,那么程序运行结果如下所示:
共同元素包括:
3
a
a=[3,5,'a',10,9,'b']
b=['c',4,3,'a']
print('共同元素有:')
for i in a :
for k in b :
if k==i:
print(k)
#或者可以直接写
'''
for i in a:
if i in b:
print(i)
'''
列表对象
向列表添加元素可以用两种方法
一个是给自己赋值
>>> a=[1,2,3]
>>> a=a+[4]
>>> print(a)
[1, 2, 3, 4]
另一个是用列表对象的属性
>>> a=[1,2]
>>> a.append(4)
>>> print(a)
[1, 2, 4]
或者是用extend
常用的几个类对象的方法
count
>>> x=[1,3,4,3,1,1,1]
>>> x.count(1)
4
index
返回某个元素第一次出现的位置
用于查找
>>> x=[1,3,4,3,1,1,1]
>>> x.index(3)
1
找到所有符合要求的
list1=[123,123,123,456,123]
i = 0
for each in list1:
if each==123:
print(list1.index(each,i))
i+=1
pop和remove、DEL
pop删除某一下标的元素,remove直接针对元素
>>> x=[1,3,4,3,1,1,1]
>>> x.pop(4)
1
>>> print(x)
[1, 3, 4, 3, 1, 1]
[1, 3, 4, 3, 1, 1]
>>> x.remove(3)
>>> print(x)
[1, 4, 3, 1, 1]
del member[1]
#也可以直接删整个列表
del member
insert 和 reverse
>>> x.insert(0,100)
>>> print(x)
[100, 1, 4, 3, 1, 1]
>>> x.reverse()
>>> print(x)
[1, 1, 3, 4, 1, 100]
sort
默认从小到大
>>> x.sort()
>>> print(x)
[1, 1, 1, 3, 4, 100]
可以在Python交互式窗口中输入 help(类名或对象) ,即可查看该类的简要文档说明(如果存在)。
题目一
请在Python的交互式运行窗口中,完成以下步骤的操作:
手动创建一个列表并赋值给变量(比如x),内容为 [‘周一’,‘Mon’,‘周二’,‘Tue’,‘周三’,‘Wed’,‘周四’,‘Thu’,‘周五’,‘Fri’,‘周六’,‘Sat’,‘周日’,‘Sun’] 。
使用切片操作,从该列表中截取出所有中文星期名称,构成一个新列表。
同上,使用切片从该列表中截取出所有英文星期名称,构成一个新列表。
观察原列表内容是否发生变化。
>>> x= ['周一','Mon','周二','Tue','周三','Wed','周四','Thu','周五','Fri','周六','Sat','周日','Sun']
>>> y=x[0::2]
>>> z=x[1::2]
>>> print(y,z)
['周一', '周二', '周三', '周四', '周五', '周六', '周日'] ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
题目二
请编写一个程序,运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够把用户输入的所有姓名显示在屏幕上,并告知一共输入了多少名字。
具体效果示例如下:
>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:END
您一共输入了 4 个姓名:
张三
李四
王五
赵六
>>>
a=[]
while True:
x=input('请输入一个姓名')
if x=='END':
break
a.append(x)
print('一共输入了',len(a),'个姓名')
for j in a:
print(j)
题目三
请在 “作业2:录入姓名” 的基础上改编程序,即:运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够从录入的名字中随机抽取一人,作为中奖者显示在屏幕上。
具体效果示例如下:
>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:END
您一共输入了 4 个姓名,其中中奖者为:
王五
>>>
import random
a=[]
while True:
x=input('请输入一个姓名')
if x=='END':
break
a.append(x)
i=len(a)
print('一共输入了',i,'个姓名')
for j in a:
print(j)
c=random.randint(0,i-1)
# random是闭区间
print('其中中奖的同学为',a[c])
题目四
运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够从录入的名字中随机抽取占总数 1/2 的个人,作为中奖者显示在屏幕上。但是请注意:不允许重复抽奖,每个人名只能被抽中一次!
具体效果示例如下:
>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:田七
请输入一个姓名:刘八
请输入一个姓名:END
您一共输入了 6 个姓名,其中中奖者为:
王五
田七
李四
>>>
import random
name_list = []
s = ''
while s!='END':
s = input('请输入一个姓名:')
name_list.append( s )
name_list.remove('END')
t = len(name_list)
print( '共输入',t , '个姓名,中奖者是:')
for i in range(0,t//2):
# //表示整除
x = random.randint(0,len(name_list)-1)
print( name_list[x] )
name_list.pop(x)