如果可能的话,我需要一些帮助来重写一些Python代码,以排除我目前在其中的zip和循环函数。我仍然是一个编码新手,所以我不确定它是否可行。
我正在使用一个名为PsychoPy的程序为学生建立实验,在那里我们也可以将他们上传到网上。对于在线上传,有一个autoJS选项,但似乎没有一个JS的等价物,我可以找到的压缩和循环。
我的代码就是这样
for x in savedImages1:
for y in savedImages2:
if x == y:
choiceImages.append(x)
for z in choiceImages:
while choiceImages.count(z) < 60:
choiceImages.append(z)
combinedList = list(zip(choiceImages, cycle(labelsWhole)))
combinedList = [list (elem) for elem in combinedList]
random.shuffle(combinedList)本质上,这里发生的事情是,有一个列表(choiceImages),在这里,他们选择的图像填充这个列表(60次)。所以如果你选择图像A,它会将图像A添加到choiceImages 60次。labelsWhole是一个预先制作的列表,也由60个项目组成,它们的图像选择与labelsWhole中的每个图像(例如A、B、A、C等)成对。然后对这个列表进行调整,使图像对保持不变(例如A、B等)。我把它们拉链成一个列表,所以图像对在洗牌过程中保持不变,就好像我只是把choiceImages和labelsWhole分开,我可以得到A,B,A,B,A,这里我只能得到A,A,B,希望这是合理的。然后,我将这两对组合分成两个单独的列表,然后保持不变。
因此,我需要一种不用压缩或循环功能的方法:
我希望我解释得够清楚了。如果没有,请让我知道哪里是不合理的,我会尽量解释得更好。
谨致问候
发布于 2022-01-11 15:16:18
您可以实现自制版本的zip和cycle。
如果您检查这些文档,您将看到“大致等效”的版本,但它们仍然使用一些典型的Python构造,而这些构造可能很难转换为JS。
因此,如果不能将生成器的概念传递给JS,则需要有返回完整列表的版本,而不是一次生成一个元素。
以下是两种可能的实现,我试图使它们尽可能非Pythonic的实现:
def myzip(iterables):
minlen = 2**64-1
for it in iterables:
ln = len(it)
if ln < minlen:
minlen = ln
out = []
for j in range(minlen):
t = []
for it in iterables:
t.append(it[j])
out.append(t)
return out
def mycycle(iterable, count):
ln = len(iterable)
out = []
for j in range(count):
out.append(iterable[j % ln])
return out
myzip(('ABCD', 'XY'))
[['A', 'X'], ['B', 'Y']]
mycycle('ABCD',13)
['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A']注意,cycle无限期地重复,所以我添加了一个count参数来说明您需要多少个元素。
https://stackoverflow.com/questions/70664190
复制相似问题