Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python查找文件的模式和中间值_Python_List_Dictionary_Mode_Median - Fatal编程技术网

用Python查找文件的模式和中间值

用Python查找文件的模式和中间值,python,list,dictionary,mode,median,Python,List,Dictionary,Mode,Median,在一个项目中,我的代码中的这一部分遇到了问题,我尝试了多种方法来实现模式和中间值,但都没有成功。然而,我确实需要在模式部分使用字典,所以那里的任何建议都会非常有用 # Find median order = converted_numbers.sort() middle = count/2 if middle % 2 == 0: median = (converted_numbers[middle - 1] + converted_numbers[

在一个项目中,我的代码中的这一部分遇到了问题,我尝试了多种方法来实现模式和中间值,但都没有成功。然而,我确实需要在模式部分使用字典,所以那里的任何建议都会非常有用

    # Find median
    order = converted_numbers.sort()
    middle = count/2
    if middle % 2 == 0:
        median = (converted_numbers[middle - 1] + converted_numbers[middle]) / 2
    else:
        median = converted_numbers[middle]

    # Mode calculations
    number_counts = {}
    mode = 0
    freq = 0
    for i in converted_numbers:
        if i in number_counts:
            number_counts[i] += 1
        else:
            number_counts[i] = 1
    for i in number_counts:
        counts = int(number_counts[i])
        mode = max(counts)

您的代码有一些问题:

list.sort不返回值。因此,如果您希望将排序列表与原始列表分开

ordered_numbers = converted_numbers[:] # copy it
ordered_numbers.sort()
使用楼层划分,检查计数是否均匀,而不是中间:

要计算模式,您可以使用python的核心库之一,集合库,然后快速获得它:

from collections import Counter

counter = Counter(ordered_numbers) # no need to be sorted
mode    = counter.most_common(1)   # returns the most commonly occuring item
编辑:

由于要求使用字典,我们可以简单地编写如下:

number_counts = {}
for num in ordered_numbers:
    if number_counts.get(num, None):
        number_counts[num] = 1
    else:
        number_counts[num] += 1

mode = ordered_numbers[0] # set to a number already in list
mode_freq = 0
for num, freq in number_counts.items():
    if freq > mode_freq:
        mode, mode_freq = num, freq
您可以使用defaultdict来代替常规dict,这允许您在存在元素时不需要使用它

from collections import defaultdict

number_counts = defaultdict(int)
for num in ordered_numbers:
    number_counts[num] += 1

mode = #.... same as above

您使用的是哪个版本的python?2或3?我使用的是版本3,如果您需要查看我的其余代码,我很乐意为您提供这么多!但是对于模式,我必须使用字典,这正是我试图做的,我想知道你是否有任何建议专门这样做?具体来说,我一直得到这个错误消息行56,在mode=maxcounts TypeError中:“int”对象是不可编辑的
from collections import defaultdict

number_counts = defaultdict(int)
for num in ordered_numbers:
    number_counts[num] += 1

mode = #.... same as above