我试图在列表中找到中位数。找到中位数的等式是 N 项/2。我尝试的代码是查找并索引该数字,但是当我索引时,我得到0或错误,为什么会这样?
def Median():
#MedianList_Str = ""
MedianList = [2,4,6]
print("What number do you want to add to the array, enter 0 to exit")
try:
Int = int(input())
if Int == 0:
QuitApp()
else:
MedianList.append(Int)
except:
print("Please enter a number")
MedianT = math.floor(len(MedianList)/2) #finds the nth term
MedianList.sort #sorts the list so you can find the median term
MedianList_Str.join(MedianList)
这就是我所做的我还尝试了索引
def Median():
MedianList_Str = ""
MedianList = [2,4,6]
print("What number do you want to add to the array, enter 0 to exit")
try:
Int = int(input())
if Int == 0:
QuitApp()
else:
MedianList.append(Int)
except:
print("Please enter a number")
MedianT = math.floor(len(MedianList)/2) #finds the nth term
MedianList.sort #sorts the list so you can find the median term
print(MedianList.index(MedianT))
这让我得到0
我怎样做才能得到中位数?我知道已经存在这样一个问题,但我想尝试一种不同的方法。
如果数组的长度是偶数,则中位数或者是中间元素的值,或者是中间两个元素的平均值。
因此,首先我们必须对数组进行排序,然后应用我们的逻辑。
def median(l):
l = sorted(l)
middle = len(l) // 2
return l[middle] if len(l) % 2 == 1 else (l[middle - 1] + l[middle]) / 2
请注意,存在更有效的算法来查找中值,这些算法花费< code>O(n)时间,而不是< code>O(n log n)时间,但是它们实现起来并不容易,并且在Python的标准库中也不可用。
正如其他人提到的,我将使用排序(中间点)
,而不是MeadianT.sort()
。
此外,使用基于数组的索引而不是 .index()
函数。
例如,这个:
print(MedianList[MedianT])
取而代之的是:
print(MedianList.index(MedianT))
我在下面的评论中包括了在Python中查找数组中位数的逻辑和思维过程。
def median(array):
length = len(array)
sorted_arr = sorted(array) # sorting in O(n) time or linear complexity
# we are subtracting 1 from overall
# length because indexing is 0-based
# essentially indexes of arrays start at 0
# while counting length starts at 1
# idx_norm = (length-1) / 2 # using only single division operator yields a float
idx = (length-1) // 2 # using floor division operator // yields an Int which can be used for index
# we run a simple condition to see
# whether if the overall length of array
# is even or odd.
# If odd then we can use index value (idx) to find median
# we use modulus operator to see if if there is any remainder
# for a division operation by 2. If remainder equals 0 then
# array is even. If not array is odd.
if length % 2 == 0:
return (sorted_arr[idx] + sorted_arr[idx + 1]) / 2.0 # if you need an Int returned, then wrap this operation in int() conversion method
else:
return sorted_arr[idx]
# If even we have to use index value (idx) and the next index value (idx + 1)
# to create total and then divide for average
a = [1, 2, 3, 4, 12, 1, 9] # 7 elements, odd length --> return 3
b = [2, 3, 7, 6, 8, 9] # 6 elements, even length --> return 6.5
median(a)
median(b)
如果您有任何问题,请告诉我,希望这有所帮助。干杯!
这里有一个很好的技巧,可以避免使用if
/else
分别处理奇数和偶数长度的情况:中间的索引是(len(nums) - 1)// 2
和len(nums) // 2
。如果长度为奇数,则这些索引相等,因此将值相加并除以 2 不起作用。
请注意,您应该使用//
运算符进行地板除法以获得一个用作索引的整数。
def median(nums):
nums = sorted(nums)
middle1 = (len(nums) - 1) // 2
middle2 = len(nums) // 2
return (nums[middle1] + nums[middle2]) / 2
例子:
>>> median([1, 2, 3, 4])
2.5
>>> median([1, 2, 3, 4, 5])
3.0
问题内容: 我想对数字求和,以便得到列表。 我尝试了以下方法: 问题答案: 如果你要对像这样的数组做大量的数值工作,我建议使用,它带有一个累加和函数: 在这种情况下,Numpy通常比纯python更快,请参阅与@Ashwini的accumu比较: 但是,当然,如果这是你唯一使用numpy的地方,则可能不值得依赖它。
问题内容: 如何在Python中获取字典中的值列表? 在Java中,将Map的值作为列表获取就像在操作中一样容易。我想知道Python中是否有类似的简单方法可以从字典中获取值列表。 问题答案: 是的,这与Python 2 完全相同: 在Python 3中 (在其中返回字典值的 视图 ):
问题内容: 有什么简单的方法或功能可以确定python列表中的最大数量?我只可以编写代码,因为我只有三个数字,但是如果我可以使用内置函数或类似的东西告诉最大的代码,那么它将使代码的冗余度降低很多。 问题答案: 关于什么
问题内容: 如何以pythonic方式从排序列表中找到缺失的号码? 我看过这篇文章,但是有没有更有效的方法呢? 问题答案: 或者(使用AP系列公式的总和) 对于可能缺少多个数字的一般情况,可以制定O(n)方法。
我有以下代码: LR是类的列表类型。在这个列表中,我有15个索引,例如在索引[0]中,我有: 现在在这个索引[0]中,我有两个int的变量end 88和start 96 在这个for循环中,我需要做的是: _fts是一个<代码>列表 我有两个错误: 错误31“系统”的最佳重载方法匹配。集合。通用。列表。添加(int)”有一些无效参数 和 错误32参数1:无法从“Lightings\u提取器”转换。
这个问题似乎与帮助中心定义的范围内的编程无关。 我想从原始字符串数组中获得一个没有重复值的新字符串数组。例如,如果原始数组是{a b b b c d, a a b b c, a b c c},我的新字符串不应该包含重复值。我根本无法弄清楚,因为不同线程中的所有解决方案都讨论单个字符串数组,而不是像这样的多个字符串数组。我不知道我是否必须使用。拆分函数并添加到hashset,然后将其添加回我创建的新