我正在生成随机列表,但出于某种原因,这里的所有三个列表都以相同的顺序结束。两个问题:
首先,这个代码出了什么问题,这三个列表的顺序相同(即target1 = target2 = target3和jitter1 = jitter2 = jitter3)?
其次,更重要的是,这是生成这些随机列表的最佳方法吗?目的是每当新主题进入时能够运行该脚本,以便每个主题具有与他/她相关联的三个随机列表。 shuffle函数是否适合用于此目的(即在脚本中随机,如果我在不同的日子运行脚本几百次不同,也会随机变化)?
非常感谢帮助。
import random
import sys
import csv
N = 200 # number of targets
l = 3 # number of lists to generate
l += 1
# generate lists
targets_M = ['stimuli/Hangul_M'+str(x)+'.png' for x in range(N/2)]
targets_F = ['stimuli/Hangul_F'+str(x)+'.png' for x in range(N/2)]
targets_null = targets_M + targets_F
delays = list(range(3, 13, 1)) # 3 : 12, n = 10
jitter_null = delays * 20
# randomize lists
for j in range(1,l):
globals()["targets"+str(j)] = targets_null
random.shuffle(globals()["targets"+str(j)])
globals()["jitter"+str(j)] = jitter_null
random.shuffle(globals()["jitter"+str(j)])
答案 0 :(得分:1)
问题是你不断为你生成的新变量分配相同的列表,因此random.shuffle
只是一遍又一遍地重排原始列表。你应该先复制一份。
# randomize lists
for j in range(1,l):
t = targets_null[:]
random.shuffle(t)
globals()["targets"+str(j)] = t
jj = jitter_null[:]
random.shuffle(jj)
globals()["targets"+str(j)] = jj
使用像这样的全局变量很尴尬。你可以使用列表。假设您想将抖动与目标相关联,您可以将它们组合在一个元组中。
# randomize lists
targets = []
for _ in range(1,l):
t = targets_null[:]
random.shuffle(t)
j = jitter_null[:]
random.shuffle(j)
targets.append((t,j))
答案 1 :(得分:0)
globals()["targets"+str(j)] = targets_null[:]
复制变量而不仅仅是指向target1 targets2和targets3都指向的原始变量。学过的知识。无论如何,仍然对最好的随机化方案感到好奇。谢谢!