是否可以在不迭代的情况下搜索整个元组以查找条目?

我的程序需要搜索包含月份数字和值的列表。(1 月是 1,2 月是 2 等等)。如果找到月份整数,我想将其对应的值附加到 avg_tuple 数组。如果它没有找到月份整数,我希望它将“N/A”附加到 output_tuple 数组,以进行报告。是否可以在不使用 { for i in my_list: } 方法的情况下搜索我的列表?


例如,我的程序的目的是计算一月份所有值的平均值。然后报告。然后取 2 月和 1 月的平均值并报告。然后是 3 月、2 月和 1 月(随着月份的继续……)。如果一个月没有此列表的值,我希望它报告 N/A。我尝试了 { if x in my_list } 方法但没有成功。


这是我的代码:


my_list = [(2, 181), (2, 183), (3, 376), (4, 205)]

input tuple = my_list


#Function to calculate and report back the average duration for each month

def average_duration(input_tuple):

    output_tuple = []

    average_tuple = []


    for number in range(1,13):

        for i in input_tuple:

            if i[1] == number:

                average_tuple.append(i[3])

        if len(average_tuple)==0:

            output_tuple.append("N/A")

            pass

        else:

            output_tuple.append((sum(average_tuple))/len(average_tuple))


    return output_tuple


这是我当前的输出。每个值对应每个月。(我使用 OpenPyxl 在电子表格中报告它们):


my_list     N/A 182 246.6666667 236.25  236.25  236.25  236.25  236.25  236.25  236.25  236.25  236.25

这是我的预期输出:


my_list     N/A,  182,  246.6666667, 236.25,  N/A,  N/A,  N/A,  N/A,  N/A,  N/A,  N/A,  N/A



慕容708150
浏览 102回答 1
1回答

小唯快跑啊

您可以尝试利用字典来一次跟踪您所有的月份,这样您就不必多次循环:from collections import defaultdictmy_list = [(2, 181), (2, 183), (3, 376), (4, 205)]input_tuple = my_list#Function to calculate and report back the average duration for each monthdef average_duration(input_tuple):    months = defaultdict(list)    output_tuple = []    for month, value in input_tuple:        months[month].append(value)    overall_report = []    for month in range(12):        report = months[month + 1]        if not report:            output_tuple.append("N/A")        else:            overall_report.extend(report)            output_tuple.append(sum(overall_report)/len(overall_report))    return output_tupleprint(average_duration(input_tuple))结果:['N/A', 182.0, 246.66666666666666, 236.25, 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']从复杂性的角度来看,这基本上与您所能获得的一样高效。您修改后显示的代码的复杂性O(12 * n)为O(12 + N). 一个并不比另一个效率低得多,但是如果不遍历整个数组就无法准确找到这些平均值,因此您只能使用O(N).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python