Python中星号 * 操作符
问题:
我们有一个数学考试成绩序列,但是不知道有多少个成绩,现在需要去掉一个最大值和一个最小值,求平均分。
解决方法:
使用星号(*)表达式
首先看一下序列赋值的基本用法:
>>>a,b,c=(1,2,3)
>>>a
1
>>>b
2
>>>c
3
下面看星号(*)表达式的基本用法:
用法1:
>>>a,*b=(1,2,3)
>>>a
1
>>>b
[2, 3]
用法2:
>>>*a,b=[1,2,3]
>>>a
[1, 2]
>>>b
3
用法3:
>>>a,*b,c=’123′
>>>a
‘1’
>>>b
[‘2’]
>>>c
‘3’
用法4:
>>>a,*b,c=(1,2)
>>>a
1
>>>b
[]
>>>c
2
有一点需要特别注意在赋值语句中使用星号(*)表达式获取序列值之后,其一定是一个列表,无论有没有获取到元素。
|
再看不在赋值语句中使用*号:
>>>a=(1,2,3,4)
>>>print(a)(1, 2, 3, 4)
>>>print(*a)1 2 3 4
>>>print(1,2,3,4)1 2 3 4
在这里,星号的作用就是将一个序列分解成多个独立的元素。
再看一个例子:
>>>a=[‘abc’]
>>>print(a)[‘abc’]
>>>print(*a)abc
>>>
>>>print(‘abc’)abc
介绍到这里,下面来看一下我们开头的问题,如何解决:
代码如下:
def myAvg(records):
try:
records=sorted(records)
first,*middle,last=records
avg=(sum(middle))/len(middle)
return avgexcept:
return -1if __name__==’__main__’:
a=[]
b=[78]
c=[80,90]
d=[3,2,1]
e=[10,20,30,40,50]
recs=(a,b,c,d,e)
for rec in recs:
print(myAvg(rec))
|
输出结果如下:
-1
-1
-1
2.0
30.0
>>>喜欢文章,欢迎大家转发!!!
|