Значение мусора, присваиваемое элементу списка после запуска цикла - PullRequest
1 голос
/ 30 января 2020

здесь часть кода:

import xlrd as xd

import numpy as n

gx = 'dx.xls'

gy = 'dy.xls'

qx = xd.open_workbook(gx)

qy = xd.open_workbook(gy)

qxs = qx.sheet_by_index(0)

qys = qy.sheet_by_index(0)

imx = qxs.nrows

jmx = qys.ncols

pi = round(n.pi , 10)

Tad = pi*.5

x = [[float(0)]*imx]*jmx

for i in range(1,jmx):

          x[i][0]  = x[i-1][0]+qxs.cell_value(0,i-1) 

и значение x[0][0] становится 945,6.

данные ячейки qsx почти постоянны во всех ячейках, которые равны 8,6609 , Пожалуйста, помогите мне и скажите, где я делаю это неправильно.

Редактировать:

Я пытаюсь прочитать файл .xls и использую значения его ячеек, которые содержат разности длины (dx) чтобы получить координату х для каждого индекса, для которого я запустил l oop. Поскольку я определил список как x и инициировал как x = [[float(0)]*imx]*jmx. После запуска кода он не показывает ошибок, но элемент в списке x[0][0] получает фиксированное значение 945.6. Этого не должно было случиться, поскольку я запустил l oop с i=1, следовательно, начиная оценку с x[1][0] и x[0][0] должен остаться 0.0. Все значения ячеек в qsx примерно одинаковы и равны 8.6609.

1 Ответ

0 голосов
/ 30 января 2020

Проблема вызвана здесь x = [[float(0)]*imx]*jmx. Кажется, что все списки внутри списка не разные, а ссылки одного и того же списка. Попробуйте изменить инициализацию x таким образом, и я думаю, что она должна работать:

ОБНОВЛЕНИЕ: Я изменил порядок циклов for для i и j.

x = []
for j in range(jmx):
  x.append([])
  for i in range(imx):
    x[j].append(float(0))

Вы можете также используйте этот синтаксис:

x = [[0.0 for i in range(imx)] for j in range(jmx)]
...