将列表元素与catch进行比较:必须首先进行相互比较…元素顺序也很重要

2024-09-28 01:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Jython/Python编写一个用于图像分析的脚本(使用ImageJ)。我的目标是比较图像。。。你知道吗

为清晰起见,请编辑:必须将列表中的每个元素与其他每个元素进行比较,但不允许进行自我比较。)

……但我有一些特别的要求。这些要求是基于我正在使用一个预定义插件的事实。你知道吗

例如:

imagefiles = ["A", "B", "C"]

第一:秩序很重要。"A""B""B""A"不同。你知道吗

第二:根据用户的输入,列表的大小是可变的。在本例中,用户输入了3个文件:A,B,C,但代码需要容纳元素数不等于3的实例。你知道吗

第三:不允许自我比较。即:"A""A"不能发生。你知道吗

第四:我希望在进入下一个元素之前,这些比较能够得到回报。例如:

"A" vs "B"然后"B" vs "A"而不是"A" vs "B"然后"A" vs "C"

第五:我最终需要以字符串的形式访问元素(由于将用户定义的变量调用到预先存在的插件中而产生的需求)。你知道吗

为清楚起见,必须进行的比较包括:

"A" vs "B"
"B" vs "A"
"A" vs "C"
"C" vs "A"
"B" vs "C"
"C" vs "B"

我能够生成一个代码,除了第四个需求之外,它可以完成所有的事情…那就是首先进行相互比较。但我真的被困在如何让比较的顺序成为我想要的。这是当前的工作截图,不符合我的要求。你知道吗

from ij import IJ  #using Jython scripting in the ImageJ program

imagefiles = ["A", "B", "C"]

for index, imgs in enumerate(imagefiles):
    for s, secondimage in enumerate(imagefiles):
        if s != index:
            IJ.run("PluginFE", "element1="+imgs+" element2="+secondimage) #this calls the plugin (PluginFE) within the ImageJ program)

我正在考虑如何完成比较顺序要求…并提出如下内容:

for imgs in imagefiles:
    for index in range(len(imagefiles)):
      if index < len(imagefiles):
        IJ.run("PluginFE", "element1="+imgs+"element2="+imagefiles[index+1])

但是这个错误失败了

IndexError: index out of range: 3

我理解错误和问题…我就是不知道如何解决。我对编码还是相当陌生,所以我可能缺少一个明显的python函数!你知道吗

谢谢你的意见


Tags: the用户in图像元素列表forindex
1条回答
网友
1楼 · 发布于 2024-09-28 01:27:13

试试这个:

for index, imgs in enumerate(imagefiles[:-1]):
    for secondimage in imagefiles[index+1:]:
        IJ.run("PluginFE", "element1="+imgs+" element2="+secondimage)
        IJ.run("PluginFE", "element1="+secondimage+" element2="+imgs)

从外循环中的下一个元素之后的下一个元素开始内循环可以确保每个元素对只处理一次,并且imgs始终是较早的元素。然后它调用IJ.run(),图像按两个顺序排列,首先是imgs vs secondimage,然后是secondimage vs imgs。你知道吗

我想你也可以用^{}

import itertools
for imgs, secondimage in itertools.combinationa(imagefiles, 2):
    IJ.run("PluginFE", "element1="+imgs+" element2="+secondimage)
    IJ.run("PluginFE", "element1="+secondimage+" element2="+imgs)

相关问题 更多 >

    热门问题