Home > python > Python: While e cicli for annidati

Python: While e cicli for annidati

23 Aprile 2010

Metodo alternativo al cosiddetto “cingolo” a scorrimento.
Da una lista genero tutte le combinazioni possibili, escluse le coppie con lo stesso elemento, doppio.
Da questa lista risultante, estraggo a sorte una coppia, ed una successiva, controllando che la seconda coppia,
non contenga elementi già presenti, nella prima.
Un po’ come negli accoppiamenti che si effettuano per stabilire un calendario sportivo.

Il codice è il seguente:

from random import choice
 
 
def get_combinations(iterable):
    combinations = []
    for item_a in iterable:
        for item_b in iterable:
            if item_a != item_b:
                combinations.append([item_a, item_b])
 
    output_list = []
    comb_1 = choice(combinations)
    output_list.append(comb_1)
    comb_2 = choice(combinations)
 
    flag = False
    while flag is False:
        flag = True
        for item_c in comb_2:
            for item_d in output_list:
                if item_c in item_d:
                    flag = False
                    comb_2 = choice(combinations)
                    break
 
    output_list.append(comb_2)
    return output_list
 
 
if __name__ == "__main__":
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))

il funzionamento è corretto:

>>> 
[[3, 4], [2, 1]]
[[1, 2], [3, 4]]
[[4, 1], [3, 2]]
[[1, 2], [3, 4]]
>>>  

ovviamente con itertools si fa molto prima:

from random import choice
import itertools as it


def get_combinations(iterable):
    combs = 
    out = [choice(combs)]
    out +=  not in out [0] and c[1] not in out[0])]
    return out


if __name__ == '__main__':
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))
    print get_combinations(range(1, 5))

infatti:

>>> 
[(1, 3), (2, 4)]
[(1, 4), (2, 3)]
[(1, 4), (2, 3)]
[(1, 2), (3, 4)]
>>>  
Categorie:python Tag:
I commenti sono chiusi.