2015-06-03 16 views
0

Я просмотрел все и не нашел ответа.Объект «Float» не подлежит подписке

То, что я пытаюсь сделать, это создать список каждой долготы от 71,42 Вт до 70,87 Вт и каждую широту от 42,19 до 42,54 Н на каждые 1/100-й широты/долготы.

Так, вроде как:

(42.19, -71.42) 

(42.19, -71.43) 

(42.19, -71.44) 

...

(42.20, -71.42) 

(42.20, -71.43) 

и т.д.,

Мой код выглядит следующим образом до сих пор:

latlong = [(42.19, -71.42)] 

while latlong[-1][0] < 42.54: 
    latlong.append(latlong[-1][0] + 1) 

print(latlong) 

Проблема заключается в том, что, когда я пытаюсь этот код, (который в настоящее время только должен делать долготу), я получаю TypeError: 'Float' object is not subscriptable.

Любая помощь будет принята с благодарностью.

Спасибо!

EDIT: ANSWERED! Спасибо, CoryCramer

+8

После первой итерации 'latlong' теперь' '[(42.19, -71.42), 43.19]', поэтому вы не можете делать 'latlong [-1] [0]' второй раз. – CoryKramer

+1

Вам нужно будет добавить 0.01, а не 1, на каждом шаге, но вы столкнетесь с проблемами точности с плавающей точкой. – chepner

ответ

0

Если я понимаю, для чего вы стреляете, вам нужна сетка с ограниченными широтами и долготами? Тогда вы могли бы сделать что-то вроде

import itertools 
longs = [-i/100.0 for i in range(7087, 7142)] 
lats = [i/100.0 for i in range(4219, 4254)] 
latlong = list(itertools.product(lats, longs)) 

Выход

[(42.19, -70.87), (42.19, -70.88), (42.19, -70.89), ... 
... 
(42.28, -70.87), (42.28, -70.88), (42.28, -70.89), ... 
... 
... (42.53, -71.39), (42.53, -71.4), (42.53, -71.41)] 
0

Последний элемент latlong является поплавок; Поплавки не подлежат индексированию. Однако ваш вопрос неясен.

Если у вас возникли вопросы: «Почему не является плавающей подписной?» то я бы спросил, как вы думаете, что делать с надписью с плавающей точкой.

Если ваш вопрос: «Почему он думает, что я пытаюсь подстроить поплавок?» то ответ заключается в том, что вы смотрите на последний элемент latlong, который теперь является float, потому что вы добавили его; возможно, вы хотели добавить (latlong [-1] [0] +1, latlong [-1] [1]).

Если у вас есть вопрос: «Как мне лучше подойти к этой проблеме?» то я бы посоветовал понять список, одну из сильных сторон питона. Обратите внимание, что это:

latLongList = [(lat/10., long/10.) for lat in range(128,135) for long in range(237,243)] 
0

Вы можете использовать 2 вложенных цикла.

latlong = [] 

for lat in range(4219, 4254 + 1): 
    for lng in range(-7142, -7087 + 1): 
     latlong.append((lat*0.01, lng*0.01)) 

Я использую целые числа, а затем их умножения на 0,01, так как функция range принимает только целые числа.

Выход:

(42.19, -71.42) 
(42.19, -71.41) 
(42.19, -71.4) 
(42.19, -71.39) 
(42.19, -71.38) 
... 
(42.54, -70.9) 
(42.54, -70.89) 
(42.54, -70.88) 
(42.54, -70.87) 
0

Вы можете сделать это с помощью простого списка понимания:

latlong = [(lat/100, lon/100) for lat in range(4219, 4255) for lon in range(-7142, -7086)] 

Вы можете найти больше списковых (и язык в целом) here.

Смежные вопросы