Python .append(row)#这次不将新行作为副本追加 纽罗() 印刷品(A)

Python .append(row)#这次不将新行作为副本追加 纽罗() 印刷品(A),python,multidimensional-array,Python,Multidimensional Array,您甚至可以通过列表理解将其缩短: from random import randint # generating the lattice def genrow(): return [1 if randint(1,100) < 50 else -1 for _ in range(20)] def newrow(): return [genrow() for _ in range(20)] A = newrow() print(A) 来自随机导入randin

您甚至可以通过列表理解将其缩短:

from random import randint
# generating the lattice

def genrow():     
    return [1 if randint(1,100) < 50 else -1 for _ in range(20)]

def newrow(): 
    return [genrow() for _ in range(20)]

A = newrow()
print(A)
来自随机导入randint
#生成晶格
def genrow():
返回[1如果randint(1100)<50,则返回-1表示范围(20)]
def newrow():
返回范围(20)内的uu的[genrow()]
A=新行()
印刷品(A)
人们甚至可以将这些列表理解合并为一个:

def newrow(): 
    return [[1 if randint(1,100) < 50 else -1 for _ in range(20)] for _ in range(20)]
def newrow():
返回[[1如果randint(1100)<50,则返回-1表示范围内(20)]表示范围内(20)]


请注意,它们都在以不同的复杂性和方法做相同的事情。重要的事实是,您要么复制,要么创建新的附加列表。所有其他的东西只是让它变得更短(可能更快)。

以下两段代码都应该在genrow函数定义中缩进

row = [0]*20


行仅被更改一次。

以下两段代码都应缩进genrow函数定义中

row = [0]*20



行仅被更改一次。

缩进是否仅在post中错误,还是在正在运行的代码中错误?
如果你说“第一个生成的行”,就好像你正在生成多个行一样,但是我只看到一行写着
行=
,然后是一组修改这一行的命令。如果您澄清了您认为代码中的哪一行是新行,那么我们就知道该用哪一个问题来结束这个问题,因为它是。:-)您的缩进是否仅在文章中或在您运行的代码中是错误的?
如果你说“第一个生成的行”,就好像你正在生成多个行一样,但是我只看到一行写着
行=
,然后是一组修改这一行的命令。如果您澄清了您认为代码中的哪一行是新行,那么我们就知道该用哪一个问题来结束这个问题,因为它是。:-)加1表示列表理解swell,如果您希望简洁而不是解释原始代码,那么numpy将赢得…:)我认为误解只是列表的易变性,还有什么需要解释的呢?我刚刚看到了提供一些备选方案(使用参数和返回)和一些进一步的见解(列出理解,以及一行
if…else…
)的机会,并在此代码中对它们进行了说明。我为什么不提供呢?是的,你当然可以;这对他来说可能太难理解了,或者至少我还得习惯这一点。并且:使用
numpy.random.randint
您甚至更短,更容易理解(嗯,不太理解发生了什么,但相信语法与输出匹配:)是的,numpy很好,但是您的示例没有实现OP想要做的事情,并且给出一个
形状
,因为
大小
对于经常使用numpy的人来说可能是正常的,但并不“清楚”。Numpy提供了比列表理解更多的开销(至少我这么认为)。但是比较答案也没有帮助。我认为拥有两个答案要比只拥有一个好得多。加上1对于列表理解swell,如果你追求简洁而不是对原始代码的解释,那么numpy将赢得……:)我认为误解只是列表的易变性,还有什么需要解释的呢?我刚刚看到了提供一些备选方案(使用参数和返回)和一些进一步的见解(列出理解,以及一行
if…else…
)的机会,并在此代码中对它们进行了说明。我为什么不提供呢?是的,你当然可以;这对他来说可能太难理解了,或者至少我还得习惯这一点。并且:使用
numpy.random.randint
您甚至更短,更容易理解(嗯,不太理解发生了什么,但相信语法与输出匹配:)是的,numpy很好,但是您的示例没有实现OP想要做的事情,并且给出一个
形状
,因为
大小
对于经常使用numpy的人来说可能是正常的,但并不“清楚”。Numpy提供了比列表理解更多的开销(至少我这么认为)。但是比较答案也没有帮助。我认为拥有两个答案要比只有一个好得多。它不应该是
A=np.random.choice([-1,1],(20,20))
?哦,你是对的,我没有仔细阅读原始代码。。。我会的,伊迪达,我现在觉得很傻。这一切都很有见地。我想这就是为什么他们警告我关于全局变量。。。!是的,但这不是反对全局变量的唯一原因,也不是主要原因——因为“避免全局变量”通常意味着“将函数所需的一切传递给它,而不是在外部定义”——这无助于解决这个问题,列表是可变的。它不应该是
a=np.random.choice([-1,1],(20,20))
?哦,你是对的,我没有仔细阅读原始代码。。。我会的,伊迪达,我现在觉得很傻。这一切都很有见地。我想这就是为什么他们警告我关于全局变量。。。!是的,但这不是反对全局变量的唯一原因,也不是主要原因——因为“避免全局变量”通常意味着“将函数所需的一切传递给它,而不是在外部定义它”——这对解决这个问题没有帮助,列表是可变的。
from random import randint
# generating the lattice

def genrow():     
    return [1 if randint(1,100) < 50 else -1 for _ in range(20)]

def newrow(): 
    return [genrow() for _ in range(20)]

A = newrow()
print(A)
def newrow(): 
    return [[1 if randint(1,100) < 50 else -1 for _ in range(20)] for _ in range(20)]
row = [0]*20
if p < 50:
   row[i] = 1
else:
   row[i] = -1
return row
for i in range(0,20):
        p = randint(1,100)