我有一组将被安排成在每一个产生它们中的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分多次]
您的“追加这里”逻辑应该追加坐标列表,然后清除该列表中的外循环的下一次迭代:
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):
...
你也可以查找如何做一个“列表理解”,这可以将流程简化为一个单一的代码行 - 很长,涉及路线,但可读适当的空白。
这是否让你感动?
有一对夫妇的解决这个办法。而不是使用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)
您可以使用组,因为他们不允许重复值:
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)
也许你可以从numpy
阵列中受益:
import numpy as np
funcs = np.random.uniform(-np.pi, np.pi, [63, 67])
这产生形状的从均匀-pi之间随机到pi阵列(63,67)。