2

私の関数では、リストに追加したい一意の変数を作成しています。しかし、次の変数を追加するたびに、リスト内の他のすべての変数の値が新しい変数に変更されます。

これが私のコードです:

def make_list_of_data_transfer_objects(iFile, eFile, index_of_sheet):

    iBook = open_workbook(iFile)
    iSheet = iBook.sheet_by_index(0)

    eBook = open_workbook(eFile)
    eSheet = eBook.sheet_by_index(index_of_sheet)

    DataSet = namedtuple('DataSet', 'line_num data_list')

    list_objects = []
    temp_line_num = 99999
    temp_data = [0]*5

    for row_index in range(eSheet.nrows):
        temp_data[0] = eSheet.cell(row_index,0).value
        temp_data[1] = eSheet.cell(row_index,1).value
        temp_data[2] = eSheet.cell(row_index,2).value
        temp_data[3] = eSheet.cell(row_index,3).value
        temp_data[4] = eSheet.cell(row_index,4).value
        for row_index2 in range(iSheet.nrows):
            if temp_data[0] == iSheet.cell(row_index2,0).value:
                temp_line_num = row_index2
                temp_object = DataSet(temp_line_num, temp_data)

                list_objects.append(temp_object)

    #print list_objects #every object is the same

    list_objects.sort(key = lambda tup: tup[0]) #sort by line number

    return list_objects
4

1 に答える 1

7

変化する

temp_object = DataSet(temp_line_num, temp_data)

temp_object = DataSet(temp_line_num, temp_data[:])

また

temp_object = DataSet(temp_line_num, list(temp_data))

に渡すtemp_dataことDataSetで、リストのコピーを作成するのではなく、既存のものを再利用するだけです。を使用する[:]list()、代わりにコピーを作成します。

于 2012-08-15T19:29:39.137 に答える