一、选择题
1.下列Python数据中其元素可以改变的是( A )。
A.列表 B.元组 C.字符串 D.数组
2.表达式“[2] in [1,2,3,4]”的值是( D )。
A.Yes B.No C.True D.False
print(2 in [1,2,3,4])
print([2] in [1,2,3,4])
print([2] in [1,[2],3,4])
本题中1,2,3,4是列表中的元素,[2]不是列表中的元素。
3.max((1,2,3)*2)的值是( A )。
A.3 B.4 C.5 D.6
s=(1,2,3)
print(s)
print(s*2)
print(max(s*2))
本题中(1,2,3)是一个元组,而(1,2,3)*2类似于字符串的重复连接操作。
p112:max(s)函数是返回序列s中最大的元素,相应的,min(s)函数是返回序列s中最小的元素
4.下列选项中与s[0:-1]表示的含义相同的是( C )。
A.s[-1] B.s[:] C.s[:len(s)-1] D.s[0:len(s)]
-1下标是列表最后一个元素,s[0:-1]的意思是输出列表中除了最后一个元素之外的其他元素
s=[1,2,3,4,5]
print(s[0:-1])
print("------------------")
print(s[-1])
print(s[:])
print(s[:len(s)-1])
print(s[0:len(s)]) #本例中s的长度len(s)是5,最后一个元素的下标是4
5.对于列表L=[1,2,'Python',[1,2,3,4,5]],L[-3]的是( B )。
A.1 B.2 C.'Python' D.[1,2,3,4,5]
6.L.reverse()和L[-1:-1-len(L):-1]的主要区别是( D )。
A.L.reverse()和L[-1:-1-len(L):-1]都将列表的所有元素反转排列,没有区别
B.L.reverse()和L[-1:-1-len(L):-1]都不会改变列表L原来内容
C.L.reverse()不会改变列表L的内容,而L[-1:-1-len(L):-1]会改变列表L原来内容
D.L.reverse()会改变列表L的内容,而L[-1:-1-len(L):-1]产生一个新列表,不会改变列表L原来内容
s=[1,2,3,4,5]
s.reverse()
print(s)
print("---------------")
m=[1,2,3,4,5]
print(m[-1:-len(m)-1:-1])
print(m)
拓展:
reserved()是python内置函数之一,其功能是对于给定的序列(包括列表、元组、字符串以及 range(n)区间),该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列)
p114 reversed(iterable)函数是对可迭代对象iterable的元素按逆序排列,返回一个新的可迭代变量。(这里是reversed,不是题干中的reverse!)
s=[1,2,3,4,5]
for i in reversed(s):
print(i,end=" ")
print()
print([i for i in reversed(s)])#列表推导式
print(s)
reversed()函数返回的是一个可迭代对象,也就是可以用于for循环 (第2,3行)
reversed(s)函数并不会改变原本s的值(第6行)
reverse()是python中列表的一个内置方法(在字典、字符串和元组中没有这个内置方法),用于列表中数据的反转
p118 s.reverse()函数是将列表中的元素逆序排列
s.reverse()操作的返回值是一个None,其作用的结果需要通过打印被作用的列表才可以查看出具体的效果
s=[1,2,3,4,5]
s.reverse()
print(s)
s=[1,2,3,4,5]
print(s.reverse())
总结:reversed(iterable)函数可用于列表,元组,字典,字符串和range(n)区间
s.reverse()函数只能用于列表
7.tuple(range(2,10,2))的返回结果是( C )。
A.[2, 4, 6, 8] B.[2, 4, 6, 8, 10]
C.(2, 4, 6, 8) D.(2, 4, 6, 8, 10)
print(tuple(range(2,10,2)))
8.下列程序执行后,p的值是( A )。
a=[[1,2,3],[4,5,6],[7,8,9]]
p=1
for i in range(len(a)):
p*=a[i][i]
A.45 B.15 C.6 D.28
9.下列Python程序的运行结果是( C )。
s=[1,2,3,4]
s.append([5,6])
print(len(s))
A.2 B.4 C.5 D.6
因为函数s.append(x)是在列表s的末尾添加元素x,本例中[5,6]是作为一个元素的,我们可以看一下添加后的结果:
如果错选D的话,那么肯定把结果理解为了这样:[1,2,3,4,5,6]
s=[1,2,3,4]
s.extend([5,6])
print(len(s))
print(s)
10.下列Python程序的运行结果是( B )。
s1=[4,5,6]
s2=s1
s1[1]=0
print(s2)
A.[4, 5, 6] B.[4, 0, 6] C.[0, 5, 6] D.[4, 5, 0]
那么s1的值会改变吗? 答案是会的。
s1=[4,5,6]
s2=s1
s1[1]=0
print(s2)
print(s1)
二、填空题
1.序列元素的编号称为 索引 ,它从 0 开始,访问序列元素时将它用 中括号 括起来。
2.对于列表x,x.append(a)等价于 x.insert(len(x),a)(用insert方法)。
p119
s.insert(i,x)
在 列表s的i位置插入x,如果i大于列表的长度,则插入到列表的最后
3.设有列表L=[1,2,3,4,5,6,7,8,9],则L[2:4]的值是 [3, 4] ,L[::2]的值是 [1, 3, 5, 7, 9] ,L[-1]的值是 9 ,L[-1:-1-len(L):-1]的值是 [9, 8, 7, 6, 5, 4, 3, 2, 1] 。
4.Python语句print(tuple(range(2)),list(range(2)))的运行结果是 (0, 1) [0, 1] 。
以下几个语句可以更好地理解:
s1=tuple(range(0,2))
print(s1)
s2=list(range(0,2))
print(s2)
print(s1,s2)
5.Python表达式[i for i in range(5) if i%2!=0]的值为 [1, 3] ,[i**2 for i in range(3)]的值为 [0, 1, 4] 。
list1=[i for i in range(5)]
list2=[i for i in range(5) if i%2!=0]
list3=[i**2 for i in range(3)]
print(list1)
print(list2)
print(list3)
6.Python语句first,*middles,last=range(6)执行后,middles的值为 [1, 2, 3, 4],sum(middles)/len(middles)的值为 2.5 。p115
first,*middles,last=range(6)
print(first)
print(middles)
print(last)
print(sum(middles)/len(middles))
7.已知fruits=[ 'apple','banana','pear'], print(fruits[-1][-1])的结果是 r ,print(fruits.index('apple'))的结果是 0 ,print('Apple' in fruits)的结果是 False 。
(列表不像字符串,没有find方法,只有index方法,也没有比如rfind,rindex方法)
8.下列程序的运行结果是 7 。
s1=[1,2,3,4]
s2=[5,6,7]
print(len(s1+s2))
当列表中有重复元素呢?
s1=[1,2,3,4]
s2=[4,5,6]
print(s1+s2)
print(len(s1+s2))
print(s1)
print(s2)
9.下列语句执行后,s值为[4, 'x', 'y']。
s=[1,2,3,4,5,6]
s[:1]=[]
s[:2]='a'
s[2:]='b'
s[2:3]=['x','y']
del s[:1]
print(s)
检验代码:
s=[1,2,3,4,5,6]
print("s:",end=" ")
print(s)
s[:1]=[]
print("s[:1]=[]:",end=" ")
print(s)
s[:2]='a'
print("s[:2]='a':",end=" ")
print(s)
s[2:]='b'
print("s[2:]='b':",end=" ")
print(s)
s[2:3]=['x','y']
print("s[2:3]=['x','y']:",end=" ")
print(s)
del s[:1]
print("del s[:1]:",end=" ")
print(s)
注意这几种写法之间的相同与不同:
s=[1,2,3,4,5,6]
s[0]=[9,8]
print(s)
s=[1,2,3,4,5,6]
s[0:1]=[9,8]
print(s)
s=[1,2,3,4,5,6]
s.append([9,8])
print(s)
s[0]表示的是列表中的元素
s[0:1]表示的是列表的某一范围
10.下列语句执行后,s值为 [5, [1, 2], 'a'] 。
s=['a','b']
s.append([1,2])
s.extend([5,6])
s.insert(10,8)
s.pop()
s.remove('b')
s[3:]=[]
s.reverse()
检验代码:
s=['a','b']
print("s:",end=" ")
print(s)
s.append([1,2])
print("s.append([1,2]):",end=" ")
print(s)
s.extend([5,6])
print("s.extend([5,6]):",end=" ")
print(s)
s.insert(10,8)
print("s.insert(10,8):",end=" ")
print(s)
s.pop()
print("s.pop():",end=" ")
print(s)
s.remove('b')
print("s.remove('b'):",end=" ")
print(s)
s[3:]=[]
print("s[3:]=[]:",end=" ")
print(s)
s.reverse()
print("s.reverse():",end=" ")
print(s)
三、问答题
1.什么叫序列?它有哪些类型?各有什么特点?
序列指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们
序列类型包括字符串、列表、元组
特点
(1) 字符串:有序,不可变的字符序列
(2) 列表: 有序,可变,可重复的数据序列
(3)元组:有序,不可变,可重复的数据序列
2.设有列表a,要求从列表a中每三个元素取一个,并且将取到的元素组成新的列表b,请写出语句。b=a[0:len(a):3]
a=[1,2,3,4,5,6,7,8,9,10]
c=a[0:len(a):3]
print(c)
3.用列表解析式生成包含10个数字5的列表,请写出语句。如果要生成包含10个数字5的元组,请写出语句。[5 for i in range(10)],tuple(5 for i in range(10))
a=list([5 for i in range(10)])
b=tuple((5 for i in range(10)))
print(a)
print(b)
4.分析下列语句的执行结果,总结语句y=x和y=x[:]的区别。
x=[1,2,3,4,5]
y=x
print(id(x))
print(id(y))
x=[1,2,3,4,5]
y=x[:]
print(id(x))
print(id(y))
上述代码说明,如果y=x的话,修改y的值,x的值也会改变;
如果y=x[:]的话,修改y的值,x的值不会改变。
例:
x=[1,2,3,4,5]
y=x
y.append(6)
print(x)
print(y)
x=[1,2,3,4,5]
y=x[:]
y.append([5,6])
print(x)
print(y)
5.分析下列语句的执行结果,总结语句m+=[4,5]和m=m+[4,5]的区别。
m=[1,2]
n=m
m+=[4,5]
print(m)
print(n)
m=[1,2]
n=m
m=m+[4,5]
print(m)
print(n)
这是为什么呢?猜测m的地址变化了:
m=[1,2]
n=m
print(id(m))
print(id(n))
m+=[4,5]
print(id(m))
print(id(n))
print(m)
print(n)
m=[1,2]
n=m
print(id(m))
print(id(n))
m=m+[4,5]
print(id(m))
print(id(n))
print(m)
print(n)
6.写出下列程序的运行结果。
n=tuple([1]*5 for i in range(4))
for i in range(len(n)):
for j in range(i,len(n[0])):
n[i][j]=i+j
print(sum(n[i]))