【问题标题】:why my for loop isn't looping? It's only giving the same value multiple times?为什么我的 for 循环不循环?它只是多次给出相同的值?
【发布时间】:2023-02-21 23:50:01
【问题描述】:

我有以下代码:

import numpy as np
import matplotlib.pyplot as plt
Rnm1_list = [] 
coordsA=[]
for a in range(2):
    c1= np.array([0,0])
    c2= np.array([a,0])
    a1= np.array([3/2*a,3**0.5/2*a])
    a2= np.array([3/2*a,-3**0.5/2*a])
    def Rnm_1():
        for n in range(-1,2):
            for m in range(-1,2):
                    Rnm1= c1 + (n*a1+m*a2)
                    Rnm1_list.append(Rnm1)
        return Rnm1_list
    coordsA.append(Rnm1_list)

在此代码中,我的 a 没有改变,它一遍又一遍地生成相同的数组,我不明白为什么? 你能帮我找出问题出在哪里吗?

我尝试了 range、linspace 并生成了一个具有值的数组,a 没有以任何这些方式发生变化。 我做错了什么,但我无法弄清楚。

【问题讨论】:

  • 问题到底是什么? coordsA 只包含一堆空列表?那是因为你从不打电话给Rnm_1()。
  • 每次循环时,您都在重新定义 Rnm_1,并且您永远不会调用它
  • 我不确定你在这里的目标是什么,但你永远不会调用你的 Rnm_1 函数,或将 Rnm1_list 分配给空列表以外的任何东西。
  • 为什么要在循环内定义函数?

标签: python graphene-python


【解决方案1】:

由定义的例程

def Rnm_1() 

永远不会被执行

您可以在其定义的末尾运行它:

import numpy as np
import matplotlib.pyplot as plt
Rnm1_list = [] 
coordsA=[]
for a in range(2):
    c1= np.array([0,0])
    c2= np.array([a,0])
    a1= np.array([3/2*a,3**0.5/2*a])
    a2= np.array([3/2*a,-3**0.5/2*a])
    def Rnm_1():
        for n in range(-1,2):
            for m in range(-1,2):
                    Rnm1= c1 + (n*a1+m*a2)
                    Rnm1_list.append(Rnm1)
        return Rnm1_list
    # Call the routine to populate the required fields
    Rnm_1()
    coordsA.append(Rnm1_list())

或者只是使用它的内容使其更容易阅读,也因为使用的变量在“Rnm_1()”范围之外:

import numpy as np
import matplotlib.pyplot as plt
Rnm1_list = [] 
coordsA=[]
for a in range(2):
    c1= np.array([0,0])
    c2= np.array([a,0])
    a1= np.array([3/2*a,3**0.5/2*a])
    a2= np.array([3/2*a,-3**0.5/2*a])
    for n in range(-1,2):
        for m in range(-1,2):
                Rnm1= c1 + (n*a1+m*a2)
                Rnm1_list.append(Rnm1)
    coordsA.append(Rnm1_list)

【讨论】:

  • 感谢您的答复。
  • 我试过你推荐的方法,但这次我遇到了另一个问题,它在范围的第二个值上循环了两次,你知道为什么会这样吗?
  • 尝试在循环“for a in range(2):”中初始化“Rnm1_list”,否则您将一遍又一遍地将值附加到同一个列表。
【解决方案2】:

您可以重新排列如下并调用函数Rnm_1()。

import numpy as np
import matplotlib.pyplot as plt

def Rnm_1(c1,c2,a1,a2):
    for n in range(-1,2):
        for m in range(-1,2):
            Rnm1= c1 + (n*a1+m*a2)
            Rnm1_list.append(Rnm1)
    return Rnm1_list

Rnm1_list = [] 
coordsA=[]
for a in range(2):
    c1= np.array([0,0])
    c2= np.array([a,0])
    a1= np.array([3/2*a,3**0.5/2*a])
    a2= np.array([3/2*a,-3**0.5/2*a])
    coordsA.append(Rnm_1(c1,c2,a1,a2))

print(coordsA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多