首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写Python代码以删除Javascript翻译的压缩和循环函数

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

Stack Overflow用户
提问于 2022-01-11 09:12:38
回答 1查看 51关注 0票数 1

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

我正在使用一个名为PsychoPy的程序为学生建立实验,在那里我们也可以将他们上传到网上。对于在线上传,有一个autoJS选项,但似乎没有一个JS的等价物,我可以找到的压缩和循环。

我的代码就是这样

代码语言:javascript
复制
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,希望这是合理的。然后,我将这两对组合分成两个单独的列表,然后保持不变。

因此,我需要一种不用压缩或循环功能的方法:

  • 将图像对成对,以便每个图像只对另一个图像配对一次,因此可以对其进行洗牌和拆分。

  • 循环通过labelsWhole添加额外的迭代(例如,如果他们首先选择了4个映像,choiceImages将拥有每个图像* 60,因此需要将labelsWhole添加到列表4次)。

我希望我解释得够清楚了。如果没有,请让我知道哪里是不合理的,我会尽量解释得更好。

谨致问候

EN

回答 1

Stack Overflow用户

发布于 2022-01-11 15:16:18

您可以实现自制版本的zipcycle

如果您检查这些文档,您将看到“大致等效”的版本,但它们仍然使用一些典型的Python构造,而这些构造可能很难转换为JS。

因此,如果不能将生成器的概念传递给JS,则需要有返回完整列表的版本,而不是一次生成一个元素。

以下是两种可能的实现,我试图使它们尽可能非Pythonic的实现:

代码语言:javascript
复制
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参数来说明您需要多少个元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70664190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档