Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我的变量是一个完整的列表而不仅仅是一个整数时,使用for循环(python)_Python_List_Loops_For Loop - Fatal编程技术网

当我的变量是一个完整的列表而不仅仅是一个整数时,使用for循环(python)

当我的变量是一个完整的列表而不仅仅是一个整数时,使用for循环(python),python,list,loops,for-loop,Python,List,Loops,For Loop,我在这里附上了我的代码摘录,以帮助我说明我的问题 此代码的作用:我从文本文件中读取了这些列表x1和vx1(每个列表都有“Npoints”元素)。在那之后,我对每个列表中的每个元素进行操作,最后我得到了新的列表x2,vx2 我想做什么:我想创建某种循环,在其中执行与我在原始列表x1和vx2上所做的相同的操作,但在我的新列表x2和vx2上执行相同的操作。这将创建我可以再次操作的列表x3和vx3。。。等等,直到我得到列表xn,vxn 还要注意的是,我已经有两个for循环在原版上运行(我不知道这是否会使

我在这里附上了我的代码摘录,以帮助我说明我的问题

此代码的作用:我从文本文件中读取了这些列表x1和vx1(每个列表都有“Npoints”元素)。在那之后,我对每个列表中的每个元素进行操作,最后我得到了新的列表x2,vx2

我想做什么:我想创建某种循环,在其中执行与我在原始列表x1和vx2上所做的相同的操作,但在我的新列表x2和vx2上执行相同的操作。这将创建我可以再次操作的列表x3和vx3。。。等等,直到我得到列表xn,vxn

还要注意的是,我已经有两个for循环在原版上运行(我不知道这是否会使事情复杂化)

希望你们能帮助我!我对Python还不熟悉,所以我非常感谢您提供的任何建议。谢谢。:)


您的代码可以被修改得非常小,以循环N次,并在
x1
vx1
上执行相同的功能。您只需将嵌套for循环包装到另一个循环中,并在每次迭代结束时重写
x1
vx1

我描述的基本思想相当普遍,下面显示了一个通用实现。在这种情况下,您的
someFunction
将是您为创建
x2
vx2
而执行的整个嵌套for循环例程

x1, vx1 = [], [] # x1 and vx1 are initialized to some values, as you do at the top of your with... as... block

# Loop N times, essentially performing the function on xn, vxn until you arrive at xN, vxN
for n in range(N):
    # Perform some function on x1 and vx1 that results in x2 and vx2
    # This function can be as complex as you need it to be, but if it is complex (as it seems to be), I would recommend moving it to its own function as I show here
    x2, vx2 = someFunction(x1, vx1)

    # Write over x1 and vx1 so they can be used in future iterations of the function
    x1, vx1 = x2, vx2

# x1 and vx1 are not essentially xN and vxN

在这段代码中,我以一个“列表列表列表”结束,它将为您进行的每个第n次迭代生成数据的历史记录。您可以执行超长函数,但为了演示,我只需在每个元素中添加1

x1 = [25, 40, 60, 100, 32, 51]
position_array = []
n_times = 5

position_array.append(x1[:])
for i in range(n_times):
    for j in range(len(x1)):
        x1[j] = x1[j] + 1
    position_array.append(x1[:])

print(position_array)
符号
position\u array.append(x1[:])
将第n个修改的x1列表的副本追加到新的“列表列表”中。避免了python初学者经常犯的一个错误,即一次又一次地追加相同的结果列表。因此,这将输出:

[[25, 40, 60, 100, 32, 51], 
[26, 41, 61, 101, 33, 52], 
[27, 42, 62, 102, 34, 53], 
[28, 43, 63, 103, 35, 54], 
[29, 44, 64, 104, 36, 55], 
[30, 45, 65, 105, 37, 56]]
如果您不想要第n次修改的历史记录,您可以执行以下操作:

x1 = [25, 40, 60, 100, 32, 51]
position_array = []
n_times = 5

for i in range(n_times):
    for j in range(len(x1)):
        x1[j] = x1[j] + 1
print(x1)
它只会输出:

[30, 45, 65, 105, 37, 56]

您需要保存阵列的“历史记录”吗,还是可以在x1和vx1上进行写入?如果没有,您应该能够使用二维数组轻松地完成这项工作,其中每一行都是在前一行上执行的函数的结果。但是,这可能会很快变得很大,所以如果你需要多次迭代,这可能不是一个理想的解决方案。我可以写x1和vx1,但我确实需要多次迭代。。。大概一万。谢谢。不要在这里使用
readlines
;对于f中的行:将迭代文件,同时一次只读取内存中的一行。@Mckenzie如果您可以写入x1和vx1,您的代码可以修改得非常少,以获得所需的结果。在嵌套for循环结束时,只需将x2和vx2复制到x1和vx1中,然后在更新的x1和vx1列表上再次重复该过程。这可以使用另一个环绕嵌套for循环的循环来完成。@acn3通过将x2和vx2复制到x1和vx1中来完成。您的意思是将x2放在x1所在的任何地方,依此类推?然后让围绕代码的for循环说。。。对于范围(0,n)内的x2??谢谢你的帮助,我明白了。非常感谢。我要试试这个。谢谢,这个确实有效,而且非常简单。我想我只是不明白循环的一些用法。然而,因为我需要这么多的迭代,你是对的,这个方法需要太长时间。。。。(我用我需要的迭代次数运行了一整晚,但仍然没有完成)所以我想我需要找到另一种方法。但是谢谢你,这很有帮助@麦肯齐:如果我的回答完全回答了你的问题,你可以考虑接受它作为问题的答案来帮助别人,在另一个问题上提出另一个问题。
[30, 45, 65, 105, 37, 56]