你好,
我正在编写一种代码,它从命令行获取用户输入(一串数字)并打印出中位数.我正试图通过以下方式实现这一目标:
从sys导入参数
数字=argv[1:]
对于索引,枚举值(数字):
Nums[索引]=浮点(值)
打印编号[1:]+编号[:1]/2
我一直收到错误:
类型错误:不支持/:'list'和'int'的操作数类型
# 回答1
切片始终返回一个列表,即使该列表只有一个运算符.因此,Nums[1:]是一个列表,Nums[:1]也是.
内置的SUM(LIST,START=0)函数可能会对您有所帮助.
# 回答2
首先,让我们考虑数字序列的中位数的定义.中位数是指一半数字较大,一半较小的数字.因此,必须对列表进行排序.如果列表包含偶数个项目,则取中间值作为中间两个数字之间的平均值.以下函数返回排序后的数字列表中的中位数:
- def median(s):
- i = len(s)
- if not i%2:
- return (s[(i/2)-1]+s[i/2])/2.0
- return s[i/2]
示例:
- >>> s1 = "100 45 89 23 105 220 45 66 8 75"
- >>> s2 = "100 45 89 23 105 220 45 66 8 75 7"
- >>> sList = [float(num) for num in s1.split()]
- >>> sList.sort()
- >>> median(sList)
- 70.5
- >>> sList
- [8.0, 23.0, 45.0, 45.0, 66.0, 75.0, 89.0, 100.0, 105.0, 220.0]
- >>> sList = [float(num) for num in s2.split()]
- >>> sList.sort()
- >>> median(sList)
- 66.0
- >>> sList
- [7.0, 8.0, 23.0, 45.0, 45.0, 66.0, 75.0, 89.0, 100.0, 105.0, 220.0]
- >>>