2015-03-04 3 views
0

Вот мой код:Рандомизации во всех возможных комбинациях в Python

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 и делает и б вести переписку. Этот код отлично работает, но он не очень красив. Мне было интересно, есть ли у кого-нибудь совет, что я делаю то же самое в меньшем количестве строк кода. Больше всего на свете я просто пытаюсь расширить свои знания о написании кода, поэтому, если вы знаете, что есть более красноречивый способ писать, дайте мне знать. :)

+0

Это может быть лучше подходит для HTTP: // кодировщик eview.stackexchange.com – jonrsharpe

+1

Хммм ... по моему счету, должно быть 120 перестановок из 5 предметов (взятых по 5 за раз) ... Кажется, у вас всего 24. Есть ли что-то здесь? – mgilson

+0

Я хотел бы помочь в этом, но картина слишком неясна. Вы меняете порядок переменных и их данные. Организуйте свои данные лучше, и будет легче увидеть шаблон. –

ответ

0

Может быть, так?

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

Похоже, вы просто перемещаете проблему с одного места на другое. –

+0

Не так ли? Это делает гораздо более короткий код, и я не вижу, как вы могли бы избежать его перечисления в целом. Либо это, либо я не вижу связи между условием и комбинацией. – L3viathan

+1

Да, я думаю, что есть связь, которую мы не видим, потому что вопрос не совсем ясен. –

2

Не уверен, что вы имели в виду «сделать и б, соответствуют», но, возможно, это будет работать:

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) 
1

Встроенная 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 перестановки

 Смежные вопросы

  • Нет связанных вопросов^_^