代码之家  ›  专栏  ›  技术社区  ›  user9644895

从列表中的元组返回具有流量强度的日期

  •  4
  • user9644895  · 技术社区  · 7 年前

    我试图在下面的函数中返回与流量强度匹配的所有日期,但只将第一个元组的所有元素作为列表,而不是所有匹配的元组。

    def traffic_intensity(count):
       """Returns string indicating intensity level given by number of 
        vehicles"""
        level_name = ""
        if(count < 5000):
            level_name = "Very Low"
        elif(count >= 5000 and count < 10000):
            level_name = "Low"
        elif(count >= 10000 and count < 18000):
           level_name = "Moderate"
        elif(count >= 18000):
            level_name = "High"
        return(level_name)
    
    
    def dates_with_intensity(vehicle_records, intensity):
        """Returns number of days with the given traffic intensity level"""
        new_list = []
        for number in vehicle_records:
            date_count = number[0]
            number_count = number[1]
            traffic = traffic_intensity(number_count)
            if traffic == intensity:
                new_list += date_count
            return new_list
    

    对于测试数据

    vehicle_records = [('2010-01-01',1),
                    ('2010-01-02',2),
                    ('2010-01-03',3)]
    days = dates_with_intensity(vehicle_records, 'Very Low')
    print(days)
    

    我应该

    ['2010-01-01', '2010-01-02', '2010-01-03']
    

    但相反,我

    ['2', '0', '1', '0', '-', '0', '1', '-', '0', '1']
    

    谁能帮我一下吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Primusa    7 年前

    将返回值从for循环中取出。此外,date\u count不是数组,因此您应该使用 .append() 不添加:

    def dates_with_intensity(vehicle_records, intensity):
    """Returns number of days with the given traffic intensity level"""
        new_list = []
        for number in vehicle_records:
            date_count = number[0]
            number_count = number[1]
            traffic = traffic_intensity(number_count)
            if traffic == intensity:
                new_list.append(date_count)
        return new_list
    
        2
  •  0
  •   Community CDub    4 年前

    有两个问题,一个是 return 在里面 for 循环,导致只查看一个项目。另一个是您可能需要扩展阵列 new_list 具有 date_count 。您可以尝试以下操作:

    def dates_with_intensity(vehicle_records, intensity):
        """Returns number of days with the given traffic intensity level"""
        new_list = []
        for number in vehicle_records:
            date_count = number[0]
            number_count = number[1]
    
            traffic = traffic_intensity(number_count)
            if traffic == intensity:
                new_list += [date_count] # extend as array
        return new_list # move return
    

    要测试类似的场景,可以考虑以下示例:

    l = []
    l += "string"
    print(l)
    

    结果:

    ['s', 't', 'r', 'i', 'n', 'g']
    

    而是:

    l = []
    l += ["string"]
    print(l)
    

    结果:

    ['string']
    

    关于更多信息,我建议 relevant discussion

    更新时间:

    我认为代码可以短一些 list comprehension 并删除中的条件 elif 包括以下内容:

    def traffic_intensity(count):
        """Returns string indicating intensity level given by number of vehicles"""
        if (count < 5000): return "Very Low"
        elif(count < 10000): return "Low"
        elif(count < 18000): return "Moderate"
        else: return "High"
        
    
    def dates_with_intensity(vehicle_records, intensity):
        """Returns number of days with the given traffic intensity level"""
        return [date for date, num in vehicle_records if intensity == traffic_intensity(num)]