-1
votes

Vérifiez si un élément existait dans une liste de listes

Le groupe Le groupe code> Picks Up pp code> d'un autre grand groupe. Je souhaite que le programme dise si des éléments de pp code> existaient dans rr code>, je veux refuser la fonction de sélection et appelez à nouveau. Si non ajoute RR code> liste avec pp code>.

J'ai deux listes comme ceci: p> xxx pré>

et j'ai Cette fonction: p> xxx pré>

ici rr code> contient 7 qui existaient dans pp code>, doit être refusé. Mais le problème qu'il est toujours accepté. et rr code> toujours ajouté par ce mauvais pp code>. p>

si je le fais comme ceci: p> xxx pré>

Il va toujours fonctionner à jamais sans aucune sortie. P>

C'est mon solOUTION, cela fonctionne, mais je ne peux pas la mettre en réponse: p>

rr1 = [[1,2], [3,4], [5,6], [7,8]]
pp1 = [[7,9], [10, 11]]



# if any(p in rr for p in pp):
#    print("cant append")  #this will send it back to the function to pick up new pp
# elif any((i in p for i in range(len(pp))) in (j in rr for j in range(len(rr))) for p in pp ):
#     print("cant append")
# else:
#      rr.extend(pp)



def is_true(pp , rr):
    for i in pp:
        for j in rr:
            if any(p in j for p in i):
                return False 
    return True



def ext (pp , rr , tt ):
    if tt == True:
        rr.extend(pp)
    else:
        print("cant append")



tt = is_true(pp1, rr1)
ext(pp1, rr1, tt)
print(rr1)


6 commentaires

pendant que h == j: si cela devient true , il reste vrai ; Ni H non j est mis à jour dans. Peut-être que si (Disclaimer: je ne comprends pas votre question).


Je suppose que vous ne faites pas référence à [7,9] dans RR , car dans l'exemple - ce n'est pas le cas? À en juger par le code, je suppose que vous souhaitez voir si un numéro dans la liste intérieure existe dans l'une des listes intérieures dans RR par exemple, 7 est dans La dernière liste de rr , et qui devrait renvoyer vrai ?


@Torxed exactement ce que je veux.


@Austine j'ai essayé le si, toujours le même problème


Je n'ai aucune idée de ce que votre résultat final devrait ressembler. Parce que dans la question pp est ajouté à rr . Et SEQ n'est jamais défini. Mais pp est remplacé pendant que vous êtes itération dessus, il est donc difficile pour nous de deviner. Mais j'ai laissé un exemple de travail où vous obtenez une liste de résultats à la fin, je ne sais pas si c'est ce que vous recherchiez.


Quelle est la fonction et que renvoie-t-il?


6 Réponses :


1
votes

Je pense que je sais ce que vous demandez, mais je ne suis pas sûr. Parce que la question est formelle maladroite, pour moi quand même.

Je pense que vous voulez utiliser des ensembles. Les ensembles sont une structure de données dans Python qui contrôlent des listes d'éléments uniques. Il semble donc que vous souhaitiez que des choses dans RR ne soient dans RR, s'ils ne sont pas déjà en pp?

Donc, j'utiliserais un ensemble pour pp. Créer un ensemble de tout dans PP: < / p> xxx

exécutant ce code: xxx

Parce que je trouve la question un peu gênante, je viens de jeter une éventuelle solution. Ce n'est pas complet, mais j'espère que cela montre l'avantage principal de l'utilisation d'un SET


3 commentaires

NameError: Nom INCOMING` n'est pas défini.` - Pas sûr de ce que entrant est censé être dans cet exemple?


Serait gentil de votre part si vous avez fait courir le code: Capable au moins. Bonne idée d'utiliser des ensembles!


Assez juste, oui, je l'ai rendu runnable.



1
votes

Je ne suis pas tout à fait sûr de ce que vous êtes après.
Mais peut-être que c'est quelque chose que vous pouvez travailler avec: XXX

ITERTOOLS aplatit simplement la "liste de contrôle", il est donc plus facile de travailler avec les chiffres. Ensuite, simplement itérer sur ceux qui vérifient les paires rr contiennent des nombres non valides. Conservez ces paires invalides dans Ignorer .

Si vous ne voulez pas ignorer une paire, ignorez simplement la partie Ignorer.
Mais cela garantira que [7, 8] n'appartient pas à vos résultats - si, par exemple, votre pp ressemblait à ceci: pp = [[7 , 9], [8, 11]]


0 commentaires

3
votes

Si vous enregistrez des nombres entiers à checkin des deux listes de listes, vous pouvez faire quelque chose comme: xxx


3 commentaires

Il ne vous donnera que true ou false s'il y a des occurrences des deux côtés, mais c'est une fonction soignée :)


Merci. Peut supprimer le bool () emballage et renvoyer un ensemble des éléments communs ..


Vrai, Altho, il n'imprimera que le nombre qui existe dans les deux cas. Encore une fois, il est très difficile de savoir ce que OP veut atteindre ici. Donc, en fonction de la demande raffinée plus tard, cela pourrait être une solution non valide si OP ou toute autre d'autre nécessite une liste nettoyée d'éléments non déclenchés de l'une ou l'autre des listes. Encore une fois, bonne utilisation de définir , et c'est élégant comme l'enfer. J'espère que les gens ne votent pas ce beau morceau de code plus tard si OP change la question hehe.



1
votes

Voici une autre approche [ Disclaimer de non-responsabilité : comme les autres que je ne suis pas tout à fait sûr que je comprenais votre question correctement, laissez un commentaire si ce n'est pas ce que vous voulez].

Si une valeur dans rr apparaît dans pp , aussi, pp ne sera pas ajouté, sinon pp sera ajouté. xxx

sortie : xxx


0 commentaires

1
votes

J'ai approché de cette façon: xxx

résultat: xxx


0 commentaires

0
votes

C'est ma solution, ça marche:
1- La fonction de groupe qui choisit les éléments en groupes: xxx pré>

2- la logique d'acceptation ou de refus de ce groupe, puis envoyez le résultat à la vue: P>

def lession_group (request):
    results=[]
    parr = list(students.objects.all())
    pick = []
    picked = []
    final = []
    for i in range(4):
        pick = groupp (parr, 2)
        while pick in final or pick[::-1] in final or any(p in picked for p in pick):
            pick = groupp (parr, 2)
        final.append(pick)
        picked.extend(pick)


0 commentaires