Python - может только объединять список, не плавать в список - PullRequest
1 голос
/ 15 марта 2012

Я понимаю, что могу объединять вещи только одинаковых типов, но я действительно смущен тем, почему следующие типы имеют разные типы.является результатом массива1 [1] и значения таблицы [1] [1].Но я получаю эту ошибку:

TypeError: can only concatenate list (not "float") to list

Должно быть что-то простое, что мне не хватает.Когда я печатаю только таблицу [1] [1], я получаю 0, так почему таблица [1] [1] не рассматривается как просто 0 (то есть 0 + 0)?

Ответы [ 6 ]

5 голосов
/ 15 марта 2012
  • table[1] действительно [0]*1, что [0], а table[1][1] действительно 0.

  • , но array[1] - это [0], то есть список

  • , таким образом, ваша попытка сделать array1[1] + table[1][1] на самом деле [0] + 0

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

print(array1[1])
print(table[1][1])
0 голосов
/ 15 марта 2012
so why is table[1][1] not treated as just 0 (I.e. 0 + 0)?

Это так. Но это не то, что вы можете добавить к array1[1] с помощью +. Это именно то, что говорится в сообщении об ошибке. + используется для сложения двух list с:

[1, 2, 3] + 4 # WRONG: can't concatenate a non-list with a list
[1, 2, 3] + [4] # RIGHT: concatenates the two lists, producing [1, 2, 3, 4]

Если вы не имели в виду, что array1[1] - это список, а просто число, то при создании array1 в нем должны храниться числа, а не списки. Ваш установочный код делает array1 списком из нескольких значений (n из них), каждое из которых является [0], то есть списком.

При этом, пожалуйста, помните, что индексы массива начинаются с 0 .

(Я также понятия не имею, что вы подразумеваете под «результатом массива [1] и значения таблицы [1] [1] в квадрате».)

0 голосов
/ 15 марта 2012

Когда вы печатаете каждый операнд, вы получите следующий вывод:

>>> array1[1]
[0]
>>> table[1][1]
0

Итак, первым является список, а вторым является одно целое число. Как таковой он, очевидно, терпит неудачу.

Поэтому вам нужно либо использовать array1[1][0] для добавления целочисленных значений, либо использовать table[1] для объединения списков.

0 голосов
/ 15 марта 2012

Ваша переменная array1 - это список, содержащий списки, каждый из которых имеет только один элемент, 0, для i в range(n).То есть array1[1] = [0], а не array1[0] = 0.Вот почему типы не совпадают.

Также не забывайте, что Python основан на 0, а не на 1.Здесь это не вызывает ошибки, но, похоже, выдает ваше мнение о [1] как о первом слоте в списке, когда [0] равно.

0 голосов
/ 15 марта 2012

И table, и array1 являются списками целых чисел (в данном случае 0).Но

array1[1]

- это список целых чисел, а

table[1][1]

- целое число.Вы можете решить проблему, используя срез, например:

mini = array1[1] + table[1][1:2]

, в результате чего mini будет равен

[0, 0]

Срез table[1][1:2] сам по себе представляет собой список, содержащийодин элемент (table[1][1]), и поскольку списки списков разрешены, он работает.

0 голосов
/ 15 марта 2012

Посмотрите, что содержит array1:

>>> array1[1]
[0]

Это не список, заполненный нулями, это список, заполненный кучей списков, каждый из которых содержит один ноль.

Вы, вероятно, хотите, чтобы эта строка:

array1 = [[0] for i in range(n)]

была такой:

array1 = [0 for i in range(n)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...