【问题标题】:Randomizing in all possible combinations in Python在 Python 中随机化所有可能的组合
【发布时间】:2015-03-04 19:52:31
【问题描述】:

这是我的代码:

if condition == '1':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '2':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '3':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")
elif condition == '4':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '5':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '6':
    a = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist1/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")
elif condition == '7':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '8':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")
elif condition == '9':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")
elif condition == '10':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '11':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '12':
    d = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '13':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '14':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '15':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '16':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    e = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '17':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    e = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '18':
    c = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    e = glob.glob("DDtest/targetimagelist4/*")
elif condition == '19':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '20':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist2/*")
    a = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")
elif condition == '21':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist4/*")
elif condition == '22':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    c = glob.glob("DDtest/targetimagelist2/*")
    d = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '23':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist4/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    c = glob.glob("DDtest/distractorimagelist3/*")
    a = glob.glob("DDtest/targetimagelist4/*")
elif condition == '24':
    e = glob.glob("DDtest/targetimagelist1/*")
    b = glob.glob("DDtest/distractorimagelist3/*")
    d = glob.glob("DDtest/targetimagelist2/*")
    a = glob.glob("DDtest/distractorimagelist3/*")
    c = glob.glob("DDtest/targetimagelist4/*")

基本上,它的作用是从基于 a、c、d、e 的所有组合的不同列表中提取,并使 a 和 b 对应。这段代码工作正常,但不是很漂亮。我想知道是否有人对我用更少的代码行做同样的事情有任何建议。最重要的是,我只是想扩展我编写代码的知识,所以如果你知道有一种更雄辩的方式来写这个,请告诉我。 :)

【问题讨论】:

  • 这可能更适合codereview.stackexchange.com
  • 嗯...根据我的计数,应该有 5 个项目的 120 个排列(一次取 5 个)...您似乎只有 24 个。我在这里遗漏了什么吗?
  • 我很想在这方面提供帮助,但模式太不清楚了。您正在交换变量及其数据的顺序。更好地组织数据,更容易看到模式。
  • 在某些情况下,a 和 b 的值相同,而不仅仅是相关(例如 9、12 和 15)-为什么?
  • 听说过列表吗?

标签: python list random psychopy


【解决方案1】:

不确定您所说的“使 a 和 b 对应”是什么意思,但也许这会起作用:

from itertools import permutations
from random import choice

globs = [glob.glob("DDtest/targetimagelist1/*"),
         glob.glob("DDtest/distractorimagelist1/*"),
         glob.glob("DDtest/targetimagelist2/*"),
         glob.glob("DDtest/distractorimagelist3/*"),
         glob.glob("DDtest/targetimagelist4/*")]

glob_permutations = list(permutations(globs))

a, b, c, d, e = choice(glob_permutations)

【讨论】:

    【解决方案2】:

    内置的itertools库有一个函数permutations不重复:

    #!/usr/bin/env python2
    import itertools
    import glob
    
    p = [
        glob.glob("DDtest/targetimagelist1/*"),
        glob.glob("DDtest/distractorimagelist4/*"),
        glob.glob("DDtest/targetimagelist2/*"),
        glob.glob("DDtest/distractorimagelist3/*"),
        glob.glob("DDtest/targetimagelist4/*"),
    ]
    
    perm = itertools.permutations(p)
    
    print(len(perm))
    

    => 120 个排列

    【讨论】:

      【解决方案3】:

      也许是这样?

      setup = {'1': ('1','1','2','3','4'),
               '2': ('1','1','2','3','4'),
              #...
              }
      a = glob.glob("DDtest/targetimagelist" + setup[condition][0] + "/*")
      b = glob.glob("DDtest/distractorimagelist" + setup[condition][1] + "/*")
      c = glob.glob("DDtest/targetimagelist" + setup[condition][2] + "/*")
      d = glob.glob("DDtest/distractorimagelist" + setup[condition][3] + "/*")
      e = glob.glob("DDtest/targetimagelist" + setup[condition][4] + "/*")
      

      【讨论】:

      • 好像你只是将问题从一个地方转移到另一个地方。
      • 是吗?它使代码更短,而且我看不出您如何避免将其全部列出。要么,要么我没有看到条件和组合之间的联系。
      • 是的,我认为存在我们没有看到的联系,因为问题并不完全清楚。
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多