Python语言程序设计 习题6

一、选择题

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.序列元素的编号称为   索引  ,它从  开始,访问序列元素时将它用 中括号 括起来。

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'))的结果是  ,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]))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值