def threshold(the_list,thresholding_value,upper_val,lower_value):
ret_list=list(the_list)
for each_item in ret_list:
if each_item <= thresholding_value:
each_item=lower_value
else:
each_item=upper_val
return ret_list
temp=[-1,2,5,3,-1,5,32,-6]
ttt=r.threshold(temp,0,1,0)
执行后我仍然得到列表相同的值
答案 0 :(得分:1)
each_item只是一个局部变量,其值被=
运算符覆盖。为其分配值不会影响原始列表。相反,您可以创建一个新列表并在返回之前填写它:
def threshold(the_list, thresholding_value, upper_val, lower_val):
ret_list = list()
for each_item in the_list:
if each_item <= thresholding_value:
ret_list.append(lower_val)
else:
ret_list.append(upper_val)
return ret_list
您还可以使用列表推导显着缩短此代码:
def threshold(the_list, thresholding_value, upper_val, lower_val):
return [lower_val if x <= thresholding_value else upper_val for x in the_list]
答案 1 :(得分:1)
列表不是不可变的,但是当你循环遍历一个时,循环控制变量会得到每个项目的副本;它不是它的别名。因此,更改它不会影响列表。
更多Pythonic方法是返回新列表的列表理解:
final Response response = mock(Response.class);
when(response.getStatus()).thenReturn(201);
when(builder.post(Entity.entity(myRequest, MediaType.APPLICATION_JSON)))
.thenReturn(response);
Response responsetest =updatedetails("a",
Details, id, "single", "foo", "foo1");
答案 2 :(得分:0)
列表绝对是可变的。你会在列表上进行迭代,每个元素依次复制到SELECT CompanyName, COUNT(DISTINCT CaseID)
FROM Company co
JOIN Workers w ON co.CompanyId = w.CompanyId
JOIN Cases ca ON w.WorkerId IN (ca.Worker1, ca.Worker2, ca.Worker3)
GROUP BY CompanyName
。 each_item会发生什么与列表无关,因为它只是一个临时变量来保存您的值,而不是指针。
将each_item表示为1元素列表或类将解决您的问题,但整个方法不是通常在python中完成的方式:为什么在为返回值创建空列表时创建列表副本你去的时候添加元素?