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),列出不同的操作列表的方法

我对在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()
    引用