python数据结构,操作列表的不同方法和最常用的方法是什么
我对在python中使用方法操纵列表感到非常困惑。说你有python数据结构,操作列表的不同方法和最常用的方法是什么,python,list,Python,List,我对在python中使用方法操纵列表感到非常困惑。说你有 mylist = [1,2,3,4] mylist.append(5) #works fine, 但是当我把 def adding(mylist): mylist.append(5) print adding(mylist) #will print out the orginal list without the 5. 而且 但我很困惑它们是如何工作的 因此,我想制作一个列表(不是用python),列出不同的操作列表的方法
mylist = [1,2,3,4]
mylist.append(5) #works fine,
但是当我把
def adding(mylist):
mylist.append(5)
print adding(mylist) #will print out the orginal list without the 5.
而且
但我很困惑它们是如何工作的
因此,我想制作一个列表(不是用python),列出不同的操作列表的方法。有人能帮忙吗?打印adding(mylist)
应该打印None
,因为您没有从函数adding()
返回任何内容
以下是:
def adding(mylist):
mylist.append(5)
test_list = range(5)
print adding(test_list)
print test_list
adding(test_list)
print test_list
生成此输出:
None
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 5]
关于第二个例子,你能更具体一点吗?数据2最初是什么?您希望得到什么?打印添加(mylist)
应该打印无
,因为您没有从函数添加()返回任何内容
def adding(mylist):
mylist.append(5)
print adding(mylist)
以下是:
def adding(mylist):
mylist.append(5)
test_list = range(5)
print adding(test_list)
print test_list
adding(test_list)
print test_list
生成此输出:
None
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 5]
关于第二个例子,你能更具体一点吗?数据2最初是什么?你期待什么
def adding(mylist):
mylist.append(5)
print adding(mylist)
您的添加方法不会返回任何内容
在mylist之后添加return mylist
。在adding
方法中附加(5)
,如下所示:-
def adding(mylist):
mylist.append(5)
return mylist
print adding(mylist)
或者,您可以用此代码替换print adding()
(如果您没有返回任何内容):-
第二个问题是:-
>>> data2 = data3 = [4, 5, 6]
>>> data2 = data2 + [1] + [2] + [3]
>>> print data2
[4, 5, 6, 1, 2, 3]
>>> data3 += [1] + [2] + [3]
>>> print data3
[4, 5, 6, 1, 2, 3]
事实上,对我来说,这两种方法都有效。。它应该是有效的,你得到了什么输出??(特别是,您希望您的输出是什么??)
您的添加方法不会返回任何内容
在mylist之后添加return mylist
。在adding
方法中附加(5)
,如下所示:-
def adding(mylist):
mylist.append(5)
return mylist
print adding(mylist)
或者,您可以用此代码替换print adding()
(如果您没有返回任何内容):-
第二个问题是:-
>>> data2 = data3 = [4, 5, 6]
>>> data2 = data2 + [1] + [2] + [3]
>>> print data2
[4, 5, 6, 1, 2, 3]
>>> data3 += [1] + [2] + [3]
>>> print data3
[4, 5, 6, 1, 2, 3]
事实上,对我来说,这两种方法都有效。。它应该是有效的,你得到了什么输出??(特别是,您希望您的输出是什么??)
没有返回语句
print mylist
[1,2,3,4,5]
这将打印[1,2,3,4,5],因为它通过引用传递。。因此,即使您尚未返回列表,您的mylist也将被修改
data2 = data3 = [1,2,3]
data2 = data2 +[4]+[5]+[6] #Actually works
没有返回语句
print mylist
[1,2,3,4,5]
这将打印[1,2,3,4,5],因为它通过引用传递。。因此,即使您尚未返回列表,您的mylist也将被修改
data2 = data3 = [1,2,3]
data2 = data2 +[4]+[5]+[6] #Actually works
我怀疑您希望原始代码工作的原因是因为您
熟悉C++语言中的传递引用。这很重要
然后要注意按引用传递和按值传递的区别。
更重要的是要了解Python正在使用哪一种
简而言之,Python实际上既不使用按引用传递,也不使用按值传递;
在Python中,传递是通过对象完成的
长答覆:
可使用C制作传递值示例:
#include <stdio.h>
void adding(int i) {
i = i + 1;
}
int main() {
int i = 0;
adding(i);
printf("i is %d\n", i); // will print "i is 0"
return 0;
}
这里,i
通过引用传递给adding()
。i
中的adding()
引用
与main()
中的i
完全相同的内存块。因此,i
将
增加到1
现在,让我们回到您的示例(我修改过的示例)来讨论Python
通过猜测您的实际意思=]):
在这里,mylist
既不是通过值传递,也不是通过引用传递。事实上,它已经过去了
反对
在Python中,mylist=[1,2,3,4]
创建一个列表[1,2,3,4]
,并附加一个
mylist
。这里需要注意的重要一点是,列表是一个
对象(IIRC,每个对象都是一个对象或其扩展)
理解这一区别将使您能够理解
示例案例:
在情况1中,对[1,2,3,4]
列表对象直接调用.append()
更改列表值,因此对象myobject
将附加到has
改变。请注意,这也是可能的,因为列表是中的可变对象
蟒蛇
在案例2中,mylist
在传递到adding()
时不会被复制,它仍然是
“已附加”到同一列表对象,类似于案例1。因此,呼吁
此对象上的.append()
将改变对象本身。外
adding()
,因为mylist
仍然附加到同一对象(即使
对象自身发生了变化),我们得到了输出[1,2,3,4,5]
在案例3中,在adding()
内部,局部变量mylist
被附加到
由[1,2,3,4]+[4]
创建的新对象。但是对象是原始的mylist
指向的值从未更改,因此,输出仍有待更改
[1,2,3,4]
案例4有点棘手。在Python中,列表是可变的,+=
起作用
作为一种快捷方式,如.extend()
,作用于调用对象本身。因此,,
原始对象已修改为[1,2,3,4,5]
和mylist
附属于它。也许还值得注意的是,对于像
元组、字符串和数字,+=
将创建一个新对象并附加
它的变量
至于在Python中使用列表的不同方法,这包含了非常全面的信息。我怀疑您希望原始代码工作的原因是因为您
熟悉C++语言中的传递引用。这很重要
然后要注意按引用传递和按值传递的区别。
更重要的是要了解Python正在使用哪一种
简而言之,Python实际上既不使用按引用传递,也不使用按值传递;
在Python中,传递是通过对象完成的
长答覆:
可使用C制作传递值示例:
#include <stdio.h>
void adding(int i) {
i = i + 1;
}
int main() {
int i = 0;
adding(i);
printf("i is %d\n", i); // will print "i is 0"
return 0;
}
这里,i
通过引用传递给adding()
。i
中的adding()
引用