все. Я пишу простую функцию в Python 2.7 с помощью модуля Networkx 1.9 для тестирования того, что моя реализация алгоритма разбиения графов работает правильно. С этой целью у меня есть список dvecs, который имеет список для каждого блока в разделе списков, которые предоставляют информацию о ребрах из каждого узла в классы в разделе. Взглянуть:Итерация и изменение вложенных записей в Python
#dvecs : list of len(P) lists which correspond to a list of degree vectors of each block
numBlocks = len(P)
dvecs = [[]] * numBlocks
for block in P:
blockNo = P.index(block)
dvecs[blockNo] = [[-1] * numBlocks] * len(block)
for node in block:
nodeNo = block.index(node)
for otherBlock in P:
otherBlockNo = P.index(otherBlock)
dvecs[blockNo][nodeNo][otherBlockNo] = len(set(nx.neighbors(G, node)).intersection(set(otherBlock)))
Проблема у меня в том, что в последней строке вложенного цикла, линии, которая начинается с dvec [blockNo ...], в соответствии с отладчиком, каждый из записей в списке средней глубины (с индексами, указанными nodeNo) обновляются с одинаковым значением для каждой итерации самого внутреннего цикла. Другими словами, это так, как будто «узел» поддерживается постоянным, а nodeNo повторяется через все узлы в блоке. Что здесь происходит?
В ответ Роман, я попытался следующие:
for blockNo, block in enumerate(P):
dvecs[blockNo] = [[-1] * numBlocks] * len(block)
for nodeNo, node in enumerate(block):
for otherBlockNo, otherBlock in enumerate(P):
dvecs[blockNo][nodeNo][otherBlockNo] = len(set(nx.neighbors(G, node)).intersection(set(otherBlock)))
Я, однако, получить такое же поведение. Я что-то пропустил?
использовать примечание Перечислим вместо того, чтобы индекс ех: HTTP: //stackoverflow.com/questions/1185545/python-loop-counter-in -a-for-loop –
Спасибо, Роман, за быстрый ответ. Я очень новичок в python, поэтому до сих пор я даже не слышал об этом. –
Если вы новичок, вы также можете ознакомиться с инструкциями по очистке файлов/других ресурсов: http://stackoverflow.com/questions/3012488/what-is-the-python-with-statement-designed-for –