Bonjour, je suis nouveau sur le forum. J'ai actuellement un problème sur python, je me base
sur un dictionnaire qui contient 4 clés, je veux donc itérer ces 4 variables afin d'obtenir toutes les combinaisons possibles.
Cependant je veux retirer les cas où les deux variables sont les mêmes et aussi les cas (i,j) et (j,i) qui sont les mêmes pour moi.

Je pensais avoir trouvé une solution cependant il me manque à chaque fois une valeur j'en ai 5 au lien d'en avoir 6.
(P1-P2)(P1-P3)(P1-P4)(P2-P3)(P2-P4)(P3-P4)

Je vous mets le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
import pickle
import os
from math import *
from numpy import *
from tkinter import *
from Dictionnaire_base_de_donnees import *
from itertools import filterfalse
import timeit
 
pos={"P1":{"position":array([0,0,0]),"rayon primitif":23.75},
     "P2":{"position":array([0,-131.25,0]),"rayon primitif" : 107.5},
     "P3":{"position":array([73,-131.25,0]),"rayon primitif":23.8},
     "P4":{"position":array([73,-51.8,0]),"rayon primitif":103.25}}
 
dico={}
liste=[element for element in pos.keys()]
for i in liste:
    filtre = lambda j : j==i
    liste2 = list(filterfalse(filtre,liste))
    print(liste2)
    liste.remove(i)
    for j in liste2:
        if pos[i]["position"][0] == pos[j]["position"][0] and pos[i]["position"][1] == pos[j]["position"][1]:
            axe_normal = "un degré de liberté selon z"
            if pos[i]["position"][2] + pos[i]["rayon primitif"] == abs(pos[j]["position"][2]) - pos[j]["rayon primitif"]:
                engrene = True
            else:
                engrene = False
        elif pos[i]["position"][1] == pos[j]["position"][1] and pos[i]["position"][2] == pos[j]["position"][2]:
            axe_normal = "un degré de liberté selon x"
            if pos[i]["position"][0] + pos[i]["rayon primitif"] == abs(pos[j]["position"][0]) - pos[j]["rayon primitif"]:
                engrene = True
            else:
                engrene = False
        elif pos[i]["position"][0] == pos[j]["position"][0] and pos[i]["position"][2] == pos[j]["position"][2]:
            axe_normal = "un degré de liberté selon y"
            if pos[i]["position"][1] + pos[i]["rayon primitif"] == abs(pos[j]["position"][1]) - pos[j]["rayon primitif"]:
                engrene = True
            else:
                engrene = False
        else:
            engrene = False
        dico[(i,j)] = engrene
 
print(dico)