我有一组随机浮点值,这些值将在每个循环的末尾排列成一个数组,产生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次 ]
答案 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之间。