-1
votes

Fonction Python pour réduire les opérateurs logiques et les opérandes dans une liste

J'ai la liste suivante.

step 1: [[3,4,5],'or',[5,6,7],'or',[8,9,10],'and',[10,11]]
step 2: [[3,4,5],'or',[5,6,7],'or' ,[10]]
step 3: [[3,4,5],'or',[5,6,7,10]]
step 4: [[3,4,5,6,7,10]]


7 commentaires

S'il vous plaît, ajoutez votre propre code, ce que vous avez essayé et où vous êtes coincé


Qu'est-ce que tu as essayé jusque-là?


En fait, je travaille juste sur cela. aucune idée de la procédure à suivre.


Je suis un débutant en programmation Python


Il semble que vous essayez de faire des intersections et des syndicats. Pour cela, il y a la construction intégrée SET < / code> type.


En Python, 'et', 'ou' sont des opérateurs booléens.Vous avez peut-être besoin d'utiliser ensemble.


Mais je dois appliquer une logique pour suivre l'ordre de fonctionnement


3 Réponses :


0
votes

Vous auriez besoin de faire deux fonctions, une pour "et" et une pour "ou". Voici ma suggestion pour 'ou': xxx

pour 'et': xxx

alors, vous devez simplement avoir quelques une sorte de fonction qui boucle via la liste, et s'il trouve un "et", il exécute la fonction et sur l'élément avant de lui et de l'élément après elle, la même pour le ou < / code> fonction. Cela ressemble à ce que vos devoirs de python, donc le reste, je vous laisserai.


0 commentaires

0
votes

Voici ma tentative!

Cette approche utilise la récursivité. La déclaration d'impression peut être utilisée pour vérifier chaque étape si j'ai compris le problème comme prévu. Certaines lacunes de ce code sont les deux appels à POP (non élégant) et le double de la boucle. Mais sur la base de ma compréhension du problème, il semble faire le travail. P>

def main(op):
  print(op)
  if len(op) > 1: 
     for i in range(0, len(op)): 
        if op[i] == "and":
             new_ele = set(op[i-1]).intersection(set(op[i+1]))
             op[i-1] = new_ele
             op.pop(i)
             op.pop(i)
             main(op)
     for i in range(0, len(op)): 
        if op[i] == "or":
            new_ele = set(op[i-1]).union(set(op[i+1]))
            op[i-1] = new_ele
            op.pop(i)
            op.pop(i)
            print(op)
            main(op)

main(op)
print(op)


0 commentaires

0
votes

J'ai compris ma propre façon de le mettre en œuvre. Merci pour vous tous de travailler dur à ce sujet. Pls passerai aussi à ma solution et laissez-moi savoir s'il semble bien.

algorithme comme suit: 1.Enparate toute la liste en 2. Un pour les opérandes (liste Lovop) et autres pour les opérateurs (liste OP). P> xxx pré>

3. P> xxx PRE>

4. P>

def unionlist(lst):
    result=set()
    for i in lst:
        result=result | set(i)
    return(list(result))


0 commentaires