首页 > 解决方案 > Python元组TypeError:'bool'对象不可下标

问题描述

我为 python 图像图编写了下面的代码。我有一个无法解决的错误。有人可以帮我看看吗?谢谢下面是我从控制台得到的错误输出。我认为这与元组有关。不应触及 main 中的代码。

routes 是一个布尔列表的元组,以及一个整数的海拔数。

Traceback (most recent call last):
  File "c:/Users/James/Desktop/mountain.py", line 91, in <module>
    show_image(data, [min_route[0]])
  File "c:/Users/James/Desktop/mountain.py", line 16, in show_image
    if any(route[i][j] for route in routes):
  File "c:/Users/James/Desktop/mountain.py", line 16, in <genexpr>
    if any(route[i][j] for route in routes):
TypeError: 'bool' object is not subscriptable

山.py

import math, random
import numpy as np
import skimage.io as io

# Please do not alter this function.
def show_image(data, routes=[]):
    '''
    Given a list of lists of integers "data",
    and an optional list of boolean list of lists "routes",
    show the data as an image and overlay the routes on the image in red.
    '''
    image_data = [x[:] for x in data]
    for i in range(len(image_data)):
        for j in range(len(image_data[i])):
            image_data[i][j] = [image_data[i][j]] * 3
            if any(route[i][j] for route in routes):
                image_data[i][j] = [255, 0, 0]
    io.imshow(np.array(image_data, dtype=np.uint8))
    io.show()

def load_dat_file(filename):

    data = []
    data = np.loadtxt(filename)

    data_temp = []
    try: 
        for item in data:
            item = str(item).replace('.', '').replace('[', '').replace(']', '').split()
            data_temp.append(item)
        data = data_temp
    except:
        print("error")

    return data

def find_elevation_route_for_starting_row(grid, starting_row):

    boolean_list = []
    elevation_change = 0

    for index_grid in range(len(grid)):
        boolean_route = []
        for index_grid_item in range(len(grid[index_grid])):
            boolean_grid_item = False
            if (index_grid == starting_row):
                boolean_grid_item = True
                if (index_grid_item + 1 < len(grid[index_grid])):
                    absolute_value = abs(int(grid[index_grid][index_grid_item + 1]) - int(grid[index_grid][index_grid_item]))
                    elevation_change = elevation_change + absolute_value
            boolean_route.append(boolean_grid_item)
        boolean_list.append(boolean_route)

    return (boolean_list, elevation_change)

def get_all_elevation_routes(grid):

    boolean_list_grid = []
    elevation_change_grid = []

    for index_grid in range(len(grid)):
        current_elevation_route = find_elevation_route_for_starting_row(grid, index_grid)
        boolean_list_grid.append(current_elevation_route[0])
        elevation_change_grid.append(current_elevation_route[1])


    return tuple(boolean_list_grid), tuple(elevation_change_grid)

def get_min_elevation_route(routes):

    routes_boolean_list = routes[0]
    routes_elevation_change_list = routes[1]
    lowest_route_index = 0

    for index_routes_elevation_change_list in range(len(routes_elevation_change_list)):
        if (routes_elevation_change_list[index_routes_elevation_change_list] < routes_elevation_change_list[lowest_route_index]):
            lowest_route_index = index_routes_elevation_change_list


    return tuple(routes_boolean_list[lowest_route_index]) 

# Please do not alter anything below this line.
if __name__ == '__main__':
    data = load_dat_file("mountroyal.dat")
    show_image(data, [])
    routes = get_all_elevation_routes(data)

    min_route = get_min_elevation_route(routes)
    assert(isinstance(min_route, tuple))

    show_image(data, [min_route[0]])
    show_image(data, [route for route, change in routes])

这是 .dat 文件的示例。它应该更长,但帖子对允许的字符有限制。完整的 .dat 文件可以在这里找到

mountroyal.dat

189 203 203 203 189 189 203 196 189 190 185 186 187 180 187 193 186 186 187 180 179 186 193 193 187 180 187 193 193 193 193 193 193 185 174 174 177 186 186 186 193 200 200 193 187 180 187 200 205 205 205 205 205 205 200 200 205 205 200 193 200 200 199 205 199 205 215 219 219 218 218 214 218 217 204 204 211 211 206 200 206 211 212 214 218 217 217 217 211 211 209 212 216 216 205 200 212 216 216 216 210 202 212 220 214 207 200 197 187 174 184 184 184 191 185 185 197 197 185 186 193 192 197 203 203 195 191 197 197 191 185 199 211 211 211 211 211 217 218 209 203 203 203 215 215 203 203 203 197 184 190 203 203 203 203 189 189 203 197 184 184 177 170 178 178 178 178 178 178 178 171 164 163 170 170 163 157 166 166 149 166 166 149 
189 203 203 203 195 193 202 202 193 187 189 190 185 186 193 187 180 187 186 179 180 187 193 193 186 186 193 193 193 193 193 193 193 192 182 172 174 178 180 187 193 193 187 180 187 193 200 205 205 205 205 205 205 200 194 200 205 205 205 204 204 199 205 210 209 224 228 223 223 223 217 217 218 209 202 206 211 211 204 204 211 211 211 217 223 217 217 217 216 218 216 216 216 216 207 205 214 216 216 216 214 209 213 225 216 207 202 190 187 181 191 187 182 185 185 197 197 185 185 197 203 203 209 212 211 204 197 197 191 185 191 204 211 211 211 211 211 212 214 212 206 202 209 219 215 203 203 197 185 185 197 203 203 203 203 189 189 203 190 177 178 170 170 178 178 178 178 178 178 178 170 170 170 163 157 149 149 166 166 149 166 166 149 
189 203 203 203 202 199 204 206 187 187 193 187 189 196 197 185 179 180 180 179 186 193 193 187 180 187 193 193 193 193 193 193 193 193 185 174 172 174 178 180 180 180 180 187 200 200 200 205 205 205 205 205 205 200 205 211 205 205 211 215 212 211 218 219 223 230 227 223 223 223 217 212 214 212 211 211 211 211 204 204 211 211 211 217 223 221 220 216 217 221 218 216 216 216 214 209 213 219 219 219 219 213 213 222 211 205 200 192 190 184 190 187 183 187 196 203 190 184 197 203 209 212 217 217 211 204 197 191 185 191 197 204 211 211 211 211 211 211 217 217 204 204 217 218 209 203 203 190 184 197 203 203 203 203 203 189 189 197 184 176 177 177 176 177 178 178 178 178 178 178 170 163 157 149 149 149 149 166 166 149 166 166 157 
189 203 203 203 203 202 206 199 185 193 193 191 191 195 190 177 178 186 187 180 187 193 193 186 186 193 193 193 193 193 193 193 193 193 192 182 172 172 174 178 180 180 187 200 205 200 205 211 211 211 211 211 211 210 215 215 210 220 229 231 224 216 218 225 234 229 221 223 223 218 214 212 217 217 211 211 211 211 204 204 211 211 211 221 225 225 224 220 224 226 222 216 216 216 216 214 216 219 219 219 223 214 210 219 213 202 197 202 192 184 192 192 192 194 202 204 193 199 211 211 217 217 212 214 212 209 200 187 195 200 200 212 216 216 216 216 216 212 211 209 202 206 212 209 203 203 197 184 190 203 203 203 203 203 203 189 189 190 177 177 176 177 170 170 178 178 178 178 178 171 164 163 162 162 162 155 148 166 166 157 172 165 165 
190 203 203 203 203 203 203 195 191 197 197 191 185 193 187 174 184 191 185 186 193 193 187 180 187 193 193 193 193 193 193 193 193 193 193 185 174 179 183 177 184 199 210 215 215 215 224 223 223 223 218 215 215 220 219 219 223 234 237 237 228 216 220 229 236 228 218 225 225 216 221 224 218 216 216 218 216 212 207 212 220 222 223 231 231 231 231 229 223 223 225 219 219 219 219 219 219 219 219 219 228 221 212 218 208 196 199 206 196 190 194 198 199 196 199 201 203 213 219 219 222 216 209 221 224 216 202 192 209 206 206 223 223 221 217 213 214 205 202 211 206 202 203 203 203 197 185 185 197 203 203 203 203 203 203 189 189 189 174 177 177 176 169 170 171 172 179 178 178 170 170 170 162 162 162 146 147 172 165 165 172 164 172 
197 203 203 203 203 203 203 202 193 193 193 179 187 193 179 179 193 195 189 196 203 197 185 186 193 193 193 193 193 193 193 193 193 193 193 192 182 193 205 187 203 229 226 224 224 225 234 231 229 226 222 222 224 230 229 231 234 236 237 237 228 216 226 232 232 229 225 231 228 223 231 228 219 219 225 225 219 213 213 223 231 231 229 228 228 227 226 226 214 219 228 223 221 221 221 221 221 221 221 221 229 229 221 212 202 199 195 200 199 192 196 208 209 200 196 196 200 212 218 218 217 210 213 227 226 216 207 206 221 215 212 225 225 220 212 199 207 206 206 216 202 202 211 206 202 196 189 196 203 203 203 203 203 203 197 184 184 184 174 174 177 170 162 163 164 172 180 179 178 170 163 157 149 149 149 140 155 171 164 172 165 165 172 ```

标签: pythonarrayspython-3.xgraphtuples

解决方案


如果您尝试打印route,您将得到TrueFalse,它们都是bool类型,并且是不可订阅的。


推荐阅读