y3trgfhsfgr
y3trgfhsfgr

Reputation: 467

Randomizing in all possible combinations in Python

Here is my code:

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/*")

Basically what this does it is draws from a different list based on all combinations of a,c,d,e and makes a and b correspond. This code works fine, but it isn't very beautiful. I was wondering if anyone had any advice I do the same thing in fewer lines of code. More than anything I'm just trying to expand my knowledge of writing code, so if you know there is a more eloquent way of writing this let me know. :)

Upvotes: 0

Views: 90

Answers (3)

wfr
wfr

Reputation: 701

The built-in itertools library has a function for permutations without repetitions:

#!/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 permutations

Upvotes: 1

1.618
1.618

Reputation: 1765

Not sure what you meant by "make a and b correspond", but maybe this would work:

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)

Upvotes: 2

L3viathan
L3viathan

Reputation: 27283

Maybe like that?

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] + "/*")

Upvotes: 0

Related Questions