为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2023-05-16 14:44:34
我的程序需要搜索包含月份数字和值的列表。(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 monthdef 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
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您可以尝试利用字典来一次跟踪您所有的月份,这样您就不必多次循环:


from collections import defaultdict


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):

    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_tuple


print(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).


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信