GVKun编程网logo

Python:为什么在我实际上不更改列表时会更改它?(python修改列表元素需要指定)

78

本文将为您提供关于Python:为什么在我实际上不更改列表时会更改它?的详细介绍,我们还将为您解释python修改列表元素需要指定的相关知识,同时,我们还将为您提供关于AngularJS:为什么在您离

本文将为您提供关于Python:为什么在我实际上不更改列表时会更改它?的详细介绍,我们还将为您解释python修改列表元素需要指定的相关知识,同时,我们还将为您提供关于AngularJS:为什么在您离开当前摘要之前$http实际上不会发出http请求?、c# – 如果匿名类型应该是不可变的,为什么可以更改它?、Python - 根据索引更改列表中的多个元素、Python DataFrame设置/更改列表字段/元素类型的方法的实用信息。

本文目录一览:

Python:为什么在我实际上不更改列表时会更改它?(python修改列表元素需要指定)

Python:为什么在我实际上不更改列表时会更改它?(python修改列表元素需要指定)

新手有问题,请保持温柔:

list = [1, 2, 3, 4, 5]list2 = listdef fxn(list,list2):    for number in list:        print(number)        print(list)        list2.remove(number)        print("after remove list is  ", list, " and list 2 is  ", list2)    return list, list2list, list2 = fxn(list, list2)print("after fxn list is  ", list)print("after fxn list2 is  ", list2)

结果是:

1[1, 2, 3, 4, 5]after remove list is   [2, 3, 4, 5]  and list 2 is   [2, 3, 4, 5]3[2, 3, 4, 5]after remove list is   [2, 4, 5]  and list 2 is   [2, 4, 5]5[2, 4, 5]after remove list is   [2, 4]  and list 2 is   [2, 4]after fxn list is   [2, 4]after fxn list2 is   [2, 4]

我不明白为什么列表改变时,我只是在做list2.remove(),没有list.remove()。我什至不知道要用什么搜索词来弄清楚。

答案1

小编典典

这是因为在进行分配后,listlist2都引用相同的列表list2=list

尝试执行以下操作以查看它们是指相同的对象还是不同的对象:

id(list)id(list2)

一个例子:

>>> list = [1, 2, 3, 4, 5]>>> list2 = list>>> id(list)140496700844944>>> id(list2)140496700844944>>> list.remove(3)>>> list[1, 2, 4, 5]>>> list2[1, 2, 4, 5]

如果您确实要创建这样的重复副本,listlist2不是引用原始列表,而是引用列表的副本,请使用slice运算符:

list2 = list[:]

一个例子:

>>> list[1, 2, 4, 5]>>> list2[1, 2, 4, 5]>>> list = [1, 2, 3, 4, 5]>>> list2 = list[:]>>> id(list)140496701034792>>> id(list2)140496701034864>>> list.remove(3)>>> list[1, 2, 4, 5]>>> list2[1, 2, 3, 4, 5]

另外,请勿将其list用作变量名,因为最初list是指类型列表,但是通过定义自己的list变量,您将隐藏list引用类型列表的原始变量。例:

>>> list<type ''list''>>>> type(list)<type ''type''>>>> list = [1, 2, 3, 4, 5]>>> list[1, 2, 3, 4, 5]>>> type(list)<type ''list''>

AngularJS:为什么在您离开当前摘要之前$http实际上不会发出http请求?

AngularJS:为什么在您离开当前摘要之前$http实际上不会发出http请求?

$http在 http://docs.angularjs.org/api/ng的AngularJS文档.$http声明“$http服务实际上不会发送请求,直到执行下一个$digest().”

我只是想知道它为什么不立即发出HTTP请求?这似乎是一个不必要的要求,我想知道我错过了什么.

更新:有人建议这是必要的,因为完成处理程序将需要更新摘要.但是,这些完成事件需要在以后的任何一种情况下进行自己的$apply / $digest调用.

解决方法

这实际上是因为$http是基于承诺的.这里有完整的解释: https://github.com/angular/angular.js/issues/2794#issuecomment-18807158

c# – 如果匿名类型应该是不可变的,为什么可以更改它?

c# – 如果匿名类型应该是不可变的,为什么可以更改它?

我以为我对匿名类型有很好的理解,但这个小代码片段让我有些困惑:

string[] arr = { "Agnes","Allan","Benny" };

var result = arr.Where(a => a.StartsWith("A")).Select(a => a);

// Why can I do the below,if arr is immutable?
result = arr.Where(a => a.EndsWith("n")).Select(a => a);

我不明白为什么我被允许为结果分配第二个值.我的意思是不是匿名类型是不可变的,它们在获得初始值后无法更改?

@R_301_5609@

首先,没有涉及 anonymous type.

这个字符串[] arr = {“Agnes”,“Allan”,“Benny”};是array creation expression.

结果是IEnumerable< string>在两个LINQ语句中,您只是创建一个查询.

这是怎么回事:

数组创建表达式

string[] arr = { "Agnes","Benny" };

query arr并返回IEnumerable< string>

var result = arr.Where(a => a.StartsWith("A")).Select(a => a);

在arr上为结果分配一个新查询,返回IEnumerable< string>

result = arr.Where(a => a.EndsWith("n")).Select(a => a);

至于理解不变性,想想String也会看到这篇文章:Immutable types: understand their benefits and use them

Python - 根据索引更改列表中的多个元素

Python - 根据索引更改列表中的多个元素

如果您有一个索引列表,并且您有 x,您可以遍历并更新相应索引处的值:

rt = [10,20,30,40]
rtInd = [2,3]
x = 10

for i in rtInd:
    rt[i] += x

# result:
# rt = [10,40,50]
,

如果 rtnumpy 数组,您可以使用索引本身的 list(或 numpy.array)进行索引(必须不是一个 tuple,要清楚,因为 tuple 用于多维访问,而不是一组要修改的索引):

# Setup
rt = numpy.array([10,40],dtype=np.int64)
rtInd = [2,3]  # Or numpy.array([2,3])
x = 123  # Arbitrary value picked

# Actual work
rt[rtInd] += x

这会将工作推送到 numpy 内的单个操作(可能会提高性能)。

也就是说,numpy 是一个非常重量级的依赖项;如果您还没有依赖 numpy,我会坚持使用 M Z's answer 中描述的简单循环。

Python DataFrame设置/更改列表字段/元素类型的方法

Python DataFrame设置/更改列表字段/元素类型的方法

Python DataFrame 如何设置列表字段/元素类型?

比如笔者想将列表的两个字段由float64设置为int64,那么就要用到DataFrame的astype属性,举例如图:

该例列表为“m_pred_survived”字段为“PassengerId”及“Survived”,设置为int64类型,最后可以输出检验下是否正确。

m_pred_survived = pd.DataFrame(columns=['PassengerId','Survived'])

以上这篇Python DataFrame设置/更改列表字段/元素类型的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

我们今天的关于Python:为什么在我实际上不更改列表时会更改它?python修改列表元素需要指定的分享就到这里,谢谢您的阅读,如果想了解更多关于AngularJS:为什么在您离开当前摘要之前$http实际上不会发出http请求?、c# – 如果匿名类型应该是不可变的,为什么可以更改它?、Python - 根据索引更改列表中的多个元素、Python DataFrame设置/更改列表字段/元素类型的方法的相关信息,可以在本站进行搜索。

本文标签: