2016-12-05 2 views
0
j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']] 
t = [] 
indexPointer = 0 

for coord in j: 
    for number in coord: 
     t[indexPointer][0] = number 
     indexPointer += 1 
indexPointer = 0 
for coord in k: 
    for number in coord: 
     t[indexPointer][1] = number 
     indexPointer += 1 
print(t) 

должен вывести:'IndexError: Индекс списка вне диапазона' при назначении

[[4,5],[5,2],[1,4],[1,2],[1,2],[5,4],[3,3],[4,3],[3,4],[1,3]] 

вместо я получаю:

t[indexPointer][0] = number 
IndexError: list index out of range 

Как я могу решить эту проблему? Я пытался найти способ, но без везения.

Редактировать: Я не включил весь необходимый код. Он обновлен.

ответ

0

Вы не можете индексировать в пустой список, так как нет ничего. Вы должны либо приложить вещи к нему, или предварительного заполнения его с пустыми значениями, например:

t = [None] * 10 

Но даже это не будет точно работать, так как вы ожидаете t быть двумерным. Вы можете попробовать сделать ту defaultdict, например, так:

from collection import defaultdict 
t = defaultdict(dict) 
t[1][0] = 'a' 
+0

Я обновил код. Сначала я был немного неясен. Может быть, вы могли бы помочь мне на основе обновленного вопроса? –

+0

То же самое относится. Вы не можете индексировать в пустой список. Вы должны либо сделать это в словаре, который вы можете индексировать по желанию, либо заполнить его пустым. – user3030010

0

Почему бы не выйти за пределы допустимого диапазона?

Ваша переменная t - это просто пустой одномерный список, к которому вы пытаетесь получить доступ, как если бы он был 2-мерным.

Я думаю, что вы просто пытаетесь добавить все, что находится в j, до t? В этом случае вы можете просто сделать что-то вроде этого: t = list(itertools.chain(*j))

Edit: Просто заметил, каждый элемент находится в его собственном списке: t = [[x] for x in itertools.chain(*j)]

+0

Я обновил код. Сначала я был немного неясен. Может быть, вы могли бы помочь мне на основе обновленного вопроса? –

0

Я бы рекомендовал код, отправленный Pythonista, но корректировать свой код, чтобы сделать его работу:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
t = [] 

for coord in j: 
    for number in coord: 
     t.append([number]) 

print(t) 
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']] 

Как вы зацикливание через каждый элемент метод списка .append привязывается к [number] в конец вашего списка t.

Вы можете выполнить этот же код вложенного цикла с помощью list comprehension:

t = [[number] for coord in j for number in coord] 

Update:

Поскольку вы обновили свой вопрос:

Вы должны рассмотреть функцию zip в эта ситуация.

t=list(itertools.chain(*zip(j,k))) 

Чтобы обновить код из выше, если вы хотите использовать for цикл, но здесь вы можете использовать этот список .extend метод:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']] 
t = [] 

for coord in zip(j,k): 
    t.extend(coord) 

print(t) 
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']] 

И как постижение:

t=[i for coord in zip(j,k) for i in coord] 
+0

Я обновил код. Сначала я был немного неясен. Может быть, вы могли бы помочь мне на основе обновленного вопроса? –

+0

@NickWright Я обновил свой ответ на основе вашего обновления – LMc

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