当前位置: 首页 > 知识库问答 >
问题:

TypeError:列表索引必须是整数或切片,而不是列表(开始结束点作为列表)

公冶俊达
2023-03-14

我的输入是这样的,我试图从a点开始和结束点来控制布线--

我试图得到一个有容量、距离和时间窗口限制的路由,在这个级别上,如果我执行代码,我会看到下面的错误:

“”TypeError:列表索引必须是整数或片,而不是列表“”

data['time_matrix'] = [
    [0, 6, 9, 8, 7, 3, 6, 2, 3, 2, 6, 6, 4, 4, 5, 9, 7],
    [6, 0, 8, 3, 2, 6, 8, 4, 8, 8, 13, 7, 5, 8, 12, 10, 14],
    [9, 8, 0, 11, 10, 6, 3, 9, 5, 8, 4, 15, 14, 13, 9, 18, 9],
    [8, 3, 11, 0, 1, 7, 10, 6, 10, 10, 14, 6, 7, 9, 14, 6, 16],
    [7, 2, 10, 1, 0, 6, 9, 4, 8, 9, 13, 4, 6, 8, 12, 8, 14],
    [3, 6, 6, 7, 6, 0, 2, 3, 2, 2, 7, 9, 7, 7, 6, 12, 8],
    [6, 8, 3, 10, 9, 2, 0, 6, 2, 5, 4, 12, 10, 10, 6, 15, 5],
    [2, 4, 9, 6, 4, 3, 6, 0, 4, 4, 8, 5, 4, 3, 7, 8, 10],
    [3, 8, 5, 10, 8, 2, 2, 4, 0, 3, 4, 9, 8, 7, 3, 13, 6],
    [2, 8, 8, 10, 9, 2, 5, 4, 3, 0, 4, 6, 5, 4, 3, 9, 5],
    [6, 13, 4, 14, 13, 7, 4, 8, 4, 4, 0, 10, 9, 8, 4, 13, 4],
    [6, 7, 15, 6, 4, 9, 12, 5, 9, 6, 10, 0, 1, 3, 7, 3, 10],
    [4, 5, 14, 7, 6, 7, 10, 4, 8, 5, 9, 1, 0, 2, 6, 4, 8],
    [4, 8, 13, 9, 8, 7, 10, 3, 7, 4, 8, 3, 2, 0, 4, 5, 6],
    [5, 12, 9, 14, 12, 6, 6, 7, 3, 3, 4, 7, 6, 4, 0, 9, 2],
    [9, 10, 18, 6, 8, 12, 15, 8, 13, 9, 13, 3, 4, 5, 9, 0, 9],
    [7, 14, 9, 16, 14, 8, 5, 10, 6, 5, 4, 10, 8, 6, 2, 9, 0],
]
    
data['time_windows'] = [
    (0, 5),  # depot
    (7, 12),  # 1
    (10, 15),  # 2
    (16, 18),  # 3
    (10, 13),  # 4
    (0, 5),  # 5
    (5, 10),  # 6
    (0, 4),  # 7
    (5, 10),  # 8
    (0, 3),  # 9
    (10, 16),  # 10
    (10, 15),  # 11
    (0, 5),  # 12
    (5, 10),  # 13
    (7, 8),  # 14
    (10, 15),  # 15
    (11, 15),  # 16
]

data['num_vehicles'] = 4
data['demands'] = [0, 1, 1, 2, 4, 2, 4, 8, 8, 1, 2, 1, 2, 4, 4, 8, 8]
data['vehicle_capacities'] = [15, 15, 15, 15]
data['depot'] = [ 0, 0, 0, 0]
data['ends']= [ 5, 5, 5, 5]

我的代码是:

    depot_idx = data['depot']
    for vehicle_id in range(data['num_vehicles']):
        index = routing.Start(vehicle_id)
        time_dimension.CumulVar(index).SetRange(
            data['time_windows'][depot_idx][0],
            data['time_windows'][depot_idx][1]) 
        
    # Add time window constraints for each location except depot.
    for location_idx, time_window in enumerate(data['time_windows']):
        if location_idx == data['depot']:
            continue
        index = manager.NodeToIndex(location_idx)
        time_dimension.CumulVar(index).SetRange(time_window[0], time_window[1])  

当我执行代码时,它会告诉我:

<ipython-input-10-8bb55ac15980> in main()
     47         index = routing.Start(vehicle_id)
     48         time_dimension.CumulVar(index).SetRange(
---> 49             data['time_windows'][depot_idx][0],
     50             data['time_windows'][depot_idx][1]) 
     51 

TypeError: list indices must be integers or slices, not list 

有谁能告诉我问题出在哪里,出在哪里,因为我试图将“depot\u idx”制作成数组,但没有成功?

共有2个答案

壤驷兴朝
2023-03-14
depot_idx = data['depot']
for vehicle_id in range(data['num_vehicles']):
    index = routing.Start(vehicle_id)
    time_dimension.CumulVar(index).SetRange(
        data['time_windows'][depot_idx][0],
        data['time_windows'][depot_idx][1]) 
  1. 这里是一个列表

所以这应该是可行的:

depot_idx = data['depot']
for vehicle_id in range(data['num_vehicles']):
    start_index = routing.Start(vehicle_id) # solver index space
    start_node = depot_idx[vehicle_id] # your index space or
    # start_node = manager.IndexToNode(start_index)
    time_dimension.CumulVar(start_index).SetRange(
        data['time_windows'][start_node][0],
        data['time_windows'][start_node][1]) 

旁注:这里有管理器。IndexToNode(start\u index)==start\u节点,但相反的是未定义的,即不能使用管理器。NodeToIndex(start\u node)由于结果不明确(即不是一个整数),实际上结果应该是[路由。范围内v的start(v)(数据['num\u vehicles'])],但由于API应返回整数,因此未为开始/结束节点定义NodeToIndex()。。。

赫连明诚
2023-03-14

您试图通过给出另一个列表来访问列表项(depot_idx是一个列表):

depot_idx = data['depot'] = [ 0, 0, 0, 0]

要访问列表中的项目,需要使用表示要访问的索引的整数或片。在您的情况下,您需要传递一个整数,因为您尝试访问项目的第一个元素(索引0):

data['time_windows'][YOUR_INTEGER][0]
 类似资料:
  • 问题内容: 我有两个列表,我想合并到一个数组中,最后将其放入一个csv文件中。我是使用Python数组的新手,但我不明白如何避免出现此错误: 并得到: 我的计数工作如何? 问题答案: 首先,应为整数而不是字符串: 其次,您的循环应使用构造: 第三,将自动增加,因此删除以下行: 注意,给定两个列表的长度相同,它们也可以只是两个列表:

  • 问题内容: 我目前正在尝试从发布请求响应中解析一些数据,并且不断收到此错误:“ TypeError:列表索引必须是整数或切片,而不是str” Python代码 JSON回应 我做了类似的代码,但这是一个get请求,一切都很好。 问题答案: 是一个数组,因此您不需要int,可以在after之后添加,它应该可以工作。然后,您可以在中引用对象内的键。

  • 我目前正试图解析get请求响应中的一些数据,但我一直遇到这样的错误:“TypeError:列表索引必须是整数或片,而不是str” 如果有人能帮我解决我想解决的问题,那就太好了。提前非常感谢你。

  • 问题内容: 我的json文件看起来像这样,我正在尝试在for循环中访问元素。 我这样做是这样的: 但是我收到错误消息:“ TypeError:列表索引必须是整数,而不是dict”。我是python(和json)的新手。有人可以建议我要去哪里错吗? 问题答案: 您遍历该 值 通过引用的名单, 没有 指标。 只需 直接 使用这些值(字典): 您可能想给它一个更有意义的循环名称:

  • 所以我对python编程相当陌生。我在尝试执行程序时面临TypeError:错误在第13行, TypeError:列表索引必须是整数或片,而不是str

  • 问题内容: 我正在学习使用Python和API(特别是此世界杯API,http://www.kimonolabs.com/worldcup/explorer) JSON数据如下所示: 我只是试图打印此API中的所有名字。这是我所拥有的: 但是当我运行它时,出现错误“ … TypeError,… TypeError:列表索引必须是整数,而不是str”。 我四处寻找解决方案,但似乎发现了更多“更深入”