индекс списка вне диапазона - списки Python с одним элементом - PullRequest
0 голосов
/ 28 июня 2018

У меня есть список только с одним элементом как:

tempeqpos2 = [600]

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

points3 = [(1795,3866)]

Теперь я пытаюсь добавить эту координату в список с именем originalval2 следующим образом:

 originalval2=[]
 for att in tempeqpos2:  
     originalval2.append(list(points3[att]))

Но это дает мне IndexError: list index out of range. Можете ли вы выяснить проблему здесь?

Поскольку каждый tempeqpos2 и points3 имеет только один элемент, я попытался сделать originalval2, дав originalval2=points3. Но это не сработало ...

Ответы [ 7 ]

0 голосов
/ 28 июня 2018

Когда вы вызываете point3 [att] after для att в tempeqpos2, att равняется 600. Вызов point3 [att] вызывает позицию 600 в списке point3.

0 голосов
/ 28 июня 2018

Вы можете использовать index, чтобы получить нужную вам позицию.

Пример:

points3 = [(1795,3866)]
tempeqpos2 = [600]
originalval2=[]
for att in tempeqpos2:
    originalval2.append(list(points3.index(att))

originalval2 будет содержать (1795,3866)

Или используя словарь:

points3 = [(1795,3866)]
tempeqpos2 = [600]
originalval2={}
for att in tempeqpos2:
    originalval2.append(dict(points3.index(att : tempeqpos2.index(att)))

originalval2 будет содержать 600 : (1795,3866)

0 голосов
/ 28 июня 2018

Использование словаря может иметь больше смысла:

tempeqpos2 = [600]
points3 = [(1795,3866)]

originalval2 = {}
for index, att in enumerate(tempeqpos2):  
    originalval2[att] = points3[index]

print(originalval2)

Runtime:

>>> tempeqpos2 = [600]
>>> points3 = [(1795,3866)]
>>>
>>> originalval2 = {}
>>> for index, att in enumerate(tempeqpos2):
...     originalval2[att] = points3[index]
...
>>> print(originalval2)
{600: (1795, 3866)}
>>>
0 голосов
/ 28 июня 2018

Ваш att назначается каждому элементу tempeqpos2, который представляет собой список целых чисел, который в данном случае равен просто 600, поэтому при оценке points3[att] он пытается получить доступ к индексу 600 из списка points3, который не существует, поскольку points3 имеет только один элемент.

Поскольку элементы в points3 соответствуют элементам в tempeqpos2, рекомендуется вместо этого присоединиться к ним как к диктату:

originalval2 = {}
for i, att in enumerate(tempeqpos2):  
    originalval2[att] = points3[i]
0 голосов
/ 28 июня 2018

Ваша проблема в том, что вы пытаетесь получить доступ к points3 [att] .

Поскольку att разрешается в int 600 , вы запрашиваете points3 [600] , когда на самом деле только points3 [0] существует.

0 голосов
/ 28 июня 2018

Я попытаюсь объяснить вам самое ясное как возможное

 tempeqpos2 = [600]
 points3 = [(1795,3866)]
 originalval2=[]
 for att in tempeqpos2:  #see that "att" value for the first iteration is 600
 originalval2.append(list(points3[att])) #and here you are asking for the "att"=600 element of the list "points3" that only have 1 element that is (1795,3866)
# and how you know is imposible ask for the element 600 if your list only have 1 element
0 голосов
/ 28 июня 2018

Изначально вы пытались получить доступ к элементу на 600-й позиции, когда в списке был только один элемент. Вам нужно получить доступ к элементу на первой позиции.

tempeqpos2 = [600]
points3 = [(1795,3866)]
originalval2=[]
for att in tempeqpos2:  
    originalval2 = points3[0]

print(originalval2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...