python 函数 数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 函数 数组相关的知识,希望对你有一定的参考价值。

比如
def func(a,b,n):
a的n列用b替换

d=[[1,2],[3,4]]
d1=[5,5]
func(d,d1,0)
func(d,d2,1)

我想d重复用,但总是被修改,函数传递数组时,是用引用。

这里你不能重复引用,你可以用另一个数组 copy 一个d的备份,然后再做你的 替换操作 参考技术A 函数中你用c=a[:]创建一个c作为a的副本,然后对c做替换操作,最后return c,那么a的值就不会变了, 参考技术B 你好,你可以考虑不用引用
a = b[:] ,这样的话,a就不跟b变化了。追问

def tiHuan(a,b,j):
a0 = []
a0 = a[:]
for i in range(len(a)):
a0[i][j] = b[i]
r = a0[:]
return r
def qiuJie(d,b):
jie = []

for i in range(len(d)):
d0 = []
d0 = d[:]
print('d = ',d)
print('dx = ',d0)
print(tiHuan(d0,b,i))

return jie

if __name__ == '__main__':
d = [[1,2,3],
[3,2,1],
[2,1,5]]
d0 = [6,7,8]
print("求解为:",qiuJie(d,d0))

用过你说的方法,但还是会被修改。

将数组/列表传递给 Python 函数

【中文标题】将数组/列表传递给 Python 函数【英文标题】:Passing an array/list into a Python function 【发布时间】:2011-04-27 00:52:24 【问题描述】:

我一直在研究将数组或列表(Python 倾向于调用它们)传递给函数。

我读到了一些关于使用 *args 的文章,例如:

def someFunc(*args)
    for x in args
        print x

但不确定这是对还是错。似乎没有什么可以按我的意愿工作。我曾经能够轻松地将数组传递给 PHP 函数,这让我很困惑。看来我也不能这样做:

def someFunc(*args, someString)

因为它抛出了一个错误。

我想我只是把自己完全弄糊涂了,想找人帮我解决。

【问题讨论】:

docs.python.org/tutorial/… 简要说明使用星号。这意味着您可以传递任意数量的参数,它们将被包装在一个元组中(可以像函数中的列表一样访问它)。带有星号的参数名称必须放在最后,以便 Python 知道哪个是哪个。 “Python 倾向于这样称呼它们”?这不是“趋势”。这是一个定义问题。 S.Lott,冷静点!我认为您在那儿有点苛刻-该评论是否对对话增加了任何内容?没有。 你可以认为这很苛刻。然而,单词选择很重要,因为其他知识较少的人会读到这个。我建议“倾向于称呼他们”是一个糟糕的词选择,因为它会使某人感到困惑。有足够的 Python 问题用“array”而不是“list”。这表明人们没有使用正确的术语并且没有成功搜索现有文档。有足够的混乱。这是一个“清单”。真的。你也可以使用这个词,而不必担心矛盾。 最有趣的部分......虽然我很欣赏 S.Lott 对文字的关心,但 Python 列表实际上是作为动态数组实现的......哈哈。 【参考方案1】:

当您使用此语法定义函数时:

def someFunc(*args):
    for x in args
        print x

您是在告诉它您期望参数数量可变。如果你想传入一个列表(来自其他语言的数组),你可以这样做:

def someFunc(myList = [], *args):
    for x in myList:
        print x

然后你可以这样调用它:

items = [1,2,3,4,5]

someFunc(items)

您需要在变量参数之前定义命名参数,在关键字参数之前定义变量参数。你也可以这样:

def someFunc(arg1, arg2, arg3, *args, **kwargs):
    for x in args
        print x

至少需要三个参数,并支持可变数量的其他参数和关键字参数。

【讨论】:

小心使用可变对象作为默认参数! def someFunc(myList = []): myList.append(1) someFunc 在没有参数的情况下被调用两次将返回 [1, 1],因为默认参数只被构造一次,当函数定义被计算时. @Rafal Rawicki 我不清楚 myList 仅被构造一次,它如何影响它在调用之间存储的内容。人们会期望 myList 在每次通话开始时为空,但正如您所指出的那样,情况并非如此。这是因为myList 不是someFunc 范围内的本地的吗? *args 在您的第二个示例 def someFunc(myList = [], *args): 中做了什么,而更简单的 def someFunc(myList = []): 没有做?谢谢。编辑:哦,等等,这意味着您可以将myList 作为列表或元组传递。无论哪种方式都有效。对吗? @PatrickT - 不。这意味着该函数采用myList 参数(并提供默认值),并且它还采用开放式数量的附加参数(示例中未使用它们)。 @PatrickT - 是的,但你混淆了一些术语,这可能会导致以后的混乱。当您编写someFunc(1, 2) 时,您不是在“传递元组”,而是在“使用两个参数调用函数”。要真正传递一个元组,你可以写someFunc((1, 2))。请注意,这会将元组值 (1, 2) 放在 myList 中,并且额外的 args 仍然为空。你可以写 someFunc((1, 2), 3) 在这种情况下你既“传递一个元组”又“提供额外的参数”。【参考方案2】:

您可以像传递其他类型一样传递列表:

l = [1,2,3]

def stuff(a):
   for x in a:
      print a


stuff(l)

这将打印列表 l。请记住,列表是作为引用而不是作为深层副本传递的。

【讨论】:

【参考方案3】:

您不需要使用星号来接受列表。

只需在定义中给参数一个名称,然后传入一个类似的列表

def takes_list(a_list):
    for item in a_list:
         print item

【讨论】:

【参考方案4】:

Python 列表(不仅仅是数组,因为它们的大小可以随时更改)是普通的 Python 对象,可以作为任何变量传递给函数。 * 语法用于解包列表,这可能不是您现在想做的事情。

【讨论】:

【参考方案5】:
def sumlist(items=[]):
    sum = 0
    for i in items:
        sum += i

    return sum

t=sumlist([2,4,8,1])
print(t)

【讨论】:

以上是关于python 函数 数组的主要内容,如果未能解决你的问题,请参考以下文章

python 函数 数组

Python数据分析-堆叠数组函数总结

python:数组/列表(remove()函数append()函数sort()函数reverse()函数)

python学习之数组二

Python无须numpy,利用map函数与zip(*)函数对数组转置(转)

将数组/列表传递给 Python 函数