如何在循环内将随机浮点值附加到数组中

时间:2019-02-06 22:50:27

标签: python arrays

我有一组随机浮点值,这些值将在每个循环的末尾排列成一个数组,产生67个,但是总共有64个循环。 举例来说,如果我每个循环有4个值,而整数共有3个循环,那么我希望这样: 值= [[0,4,5,1],[6,6,5,3],[0,0,0,7]] 这样我就可以将它们标识为单独的数组,但是,我不确定在创建值后追加值的最佳方法,但是知道如何返回它们。原谅我,因为我不懂逻辑。

import math
import random

funcs = []
coord = []

pi = math.pi

funcAmt = 0
coordAmt = 0
repeatAmt = 0
coordPass = 0

while funcAmt < 64:
    while coordAmt < 67:
        coordAmt += 1
        uniform = round(random.uniform(-pi, pi), 2)
        print("Coord [",coordAmt,"] {",uniform,"} Func:", funcAmt + 1)
        if uniform in coord:
            repeatAmt += 1
            print("Repeat Found!")
            coordAmt -= 1
            print("Repeat [",repeatAmt,"] Resolved")
            pass
        else:
            coordPass += 1
            coord.append(uniform)
    #<<<Append Here>>>
    funcAmt += 1
    coord.clear()
    coordAmt = 0

在我上面给出的代码中,它类似于: func = [ [<67个项目>], ...更多63次 ]

4 个答案:

答案 0 :(得分:1)

您的“附加到此处”逻辑应附加坐标列表,然后为外部循环的下一次迭代清除该列表:

funcs.append(coord[:])    # The slice notation makes a copy of the list
coord.clear()             # or simply coord = []

您应该学习使用for循环。这将简化循环过程:您不必自己维护计数。例如:

for funcAmt in range(64):
    for coordAmt in range(67):
        ...

您还可能会查找如何进行“列表理解”,这可以将您的过程简化为一行代码-涉及很长的一行,但可以在适当的空白处读取。

这会让你动起来吗?

答案 1 :(得分:0)

有两种解决方法。除了使用while列表和计数器,您还可以使用for循环。或至少对外部循环执行此操作,因为看起来您仍然想检查重复。这是一个使用原始尺寸3和4的示例:

from math import pi
import random

coord_sets = 3
coords = 4

biglist = []
for i in range(coord_sets):

    coords_set = []
    non_repeating_coords = 0
    while non_repeating_coords < coords:
        new_coord = round(random.uniform(-1.0*pi, pi), 2)
        if new_coord not in coords_set:
            coords_set.append(new_coord)
            non_repeating_coords += 1

    biglist.append(coords_set)

print(biglist)

答案 2 :(得分:0)

您可以使用集合,因为它们不允许重复的值:

from math import pi
import random

funcs = []
funcAmt = 0

while funcAmt < 64:  # This is the number of loops
    myset = set()
    while len(myset) < 67:  # This is the length of each set
        uniform = round(random.uniform(-pi, pi), 2)
        myset.add(uniform)
    funcs.append(list(myset))  # Append randomly generated set as a list
    funcAmt += 1

print(funcs)

答案 3 :(得分:0)

也许您可以从numpy中的数组中受益:

import numpy as np

funcs = np.random.uniform(-np.pi, np.pi, [63, 67])

这会创建一个形状数组(63、67),其形状介于-pi和pi之间。