繁体   English   中英

重写 Python 代码以删除 zip 和 Javascript 翻译的循环函数

[英]Rewriting Python code to remove zip and cycle functions for Javascript translation

如果可能的话,我需要一些帮助来重写一些 Python 代码,以排除 zip 和循环功能。 我仍然是编码新手,所以我不确定它是否可行。

我正在使用一个名为 PsychoPy 的程序为学生构建实验,我们也可以在其中在线上传它们。 对于在线上传,有一个 autoJS 选项,但是对于 zip 和循环,我似乎找不到等效的 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,A],[A,B],[A.,C] 等)。 然后将该列表打乱,以便保留图像对(例如 [A,B][B,E] 等)。 我将它们压缩为一个列表,因此图像对在洗牌过程中保持不变,就好像我只是分别洗牌了choiceImages和labelsWhole我最终可以得到[A,B],[A,B] [B,A] [B,A ] 我应该只得到 [A,A] [A,B] [B,A] [B,B]。 希望这是有道理的。 然后我后来将这些对分成两个单独的列表,然后保持不变。

所以我需要一种方法,无需 zip 或循环功能:

  • 将图像相互配对,使每个图像只与另一个配对一次,因此可以洗牌和拆分盘子。

  • 循环遍历 labelsWhole 以添加额外的迭代(例如,如果他们选择 4 个图像开始,choiceImages 将具有每个图像 * 60,因此 labelsWhole 需要添加到列表中 4 次)。

我希望我已经解释得足够好。 如果不是,请让我知道哪里没有意义,我会尽力解释得更好。

最好的祝愿

您可以实现zipcycle的自制版本。

如果您查看文档,您将看到“大致等效”的版本,但它们仍在使用一些典型的 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参数来说明您想要多少个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM