我创建了一个名为“数据”的列表,用于存储列表。
Grid = [[0, 0, 0, 0], [1, 0, 0, 0], [2, 1, 0, 0], [1, 2, 3, 0]]
data = [[[1, 5, 7, 6, 8], 10, [5, 10], []], [[], 20, [10, 20, 3], []], [[], 4, [1, 11, 2], []], [[], 5, [7, 8, 9], []]]
size = len(Grid)
n_weeks = len(data[0][0])
def return_sch(demand, avail, sr):
sum_sr =0
for i in range(len(sr)):
sum_sr = sum_sr +sr[i]
avail = avail+sum_sr
n = len(demand)
for i in range(n):
if demand[i]<avail:
avail = avail - demand[i]
demand[i] =0
elif demand[i]>=0:
demand[i] = demand[i]-avail
avail =0
return demand
print(data[0][0])
print(return_sch(data[0][0], data[0][1], data[0][2]))
print(data[0][0])
更多参考:
data[i] is data of the ith item.
data[i][0] => demand of ith item
data[i][1] => availability of ith item
data[i][2] => scheduled reciept of ith item
data[i][3] => prouduction schedule
但是,为什么data [0] [0]的值改变了?我不想更改它。
请提出一些建议。谢谢。
答案 0 :(得分:2)
因为data[0][0]
是一个数组,所以值发生了变化,并且您通过引用return_sch
函数将其传递。在此函数内,此数组称为demand
,在此函数内,可通过写入demand
的单元格来对其进行修改。并且由于demand
只是原始数组的名称,因此您可以修改原始数组。
如果您不希望函数更改数组,则可以选择:
demand
创建自己的数组。我会把这样做的乐趣留给自己:-)list(data[0][0])
而不是data[0][0]
在呼叫站点进行复制,例如:print(data[0][0])
print(return_sch(list(data[0][0]), data[0][1], data[0][2]))
print(data[0][0])
demand = list(demand)
在函数内复制(从软件工程的角度来看更可取),例如:def return_sch(demand, avail, sr):
demand = list(demand)
sum_sr = 0
for i in range(len(sr)):
sum_sr = sum_sr + sr[i]
avail = avail + sum_sr
n = len(demand)
for i in range(n):
if demand[i] < avail:
avail = avail - demand[i]
demand[i] = 0
elif demand[i] >= 0:
demand[i] = demand[i] - avail
avail = 0
return demand
答案 1 :(得分:0)
您正在传递要使用的列表。由于list是一个可变对象,因此您实际上是在进行通过引用传递。因此,更改将反映回传递的数据。
一个简单的例子来说明我的观点:
def list_append(lst):
lst.append('another_value')
some_lst = ['some_value']
list_append(some_lst)
print(some_lst)
# ['some_value', 'another_value']
对于元组而言,这是不正确的,因为它是不可变的:
def tuple_append(tupl):
tupl += ('another_value',)
some_tupl = ('some_value',)
tuple_append(some_tupl)
print(some_tupl)
# ('some_value',)
答案 2 :(得分:0)
此行:
demand[i] = demand[i]-avail
更改data[0][0]
。
您将data[0][0]
作为第一个参数return_sch
传递到demand
。 demand
现在是对data[0][0]
所引用对象的引用。因此,当您更改demand[i]
时,就是在修改data
所指的内容。