0
votes

Python Liste ajoutée, Nothings ajoutés

Alors que je pratiquais une question de python, il y avait quelque chose que je n'ai pas compris Ci-dessous mon code

def solution(participant, completion):
    answer = []
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
                   if participant[i]!=completion[i]:
                       answer.append(participant.pop(i))
                       return answer
    return answer


solution(["leo", "kiki", "eden"],["eden", "kiki"])
solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"])


2 commentaires

Utilisez ZIP


Parce que vous seul itérer achèvement qui est une liste plus courte que participant , vous ne voyez donc jamais Leo ou Vinko .


7 Réponses :


0
votes

Pourquoi n'essayez-vous pas de faire quelque chose de plus simple à l'aide d'un ensemble haché en python.

def solution(participant, completion):
    answer = []
    completion_set = set(completion)

    for p in participant:
        if p not in completion_set:
            answer.append(p)
    return answer


print(solution(["leo", "kiki", "eden"],["eden", "kiki"]))


0 commentaires

1
votes

Tout d'abord, vous n'avez pas besoin d'utiliser une sorte de tri, sauf si bien sûr que vous souhaitez les résultats dans l'ordre.

Deuxièmement, il y a un excellent moyen de vérifier si un élément n'est pas dans une liste à l'aide d'une liste.

J'espère que cela aide :) xxx

la solution pour inclure des noms de double. Comme demandé dans les commentaires ci-dessous: xxx

donc ci-dessus je vérifie les différences de comptage entre le nombre de survers de l'élément dans chaque liste, si la première liste est plus grande que la seconde, donc leur doit être plus de cet élément dans le premier. Je m'assonne également à ne pas ajouter de duplicats à la liste résultante (pas sûr de si cela était nécessaire)


6 commentaires

Pourquoi boucle à travers des indices lorsque vous pouvez faire boucle à travers la liste actuelle?


J'essayais d'utiliser une partie de la logique existante de la question, mais oui, c'est une meilleure façon de faire


Et si vous voulez aussi avoir une autre personne avec le même nom? Comme si la liste des participants est ["Mislav", "Stanko", "Mislav", "Ana"] et l'achèvement ["Stanko", "Ana", "Mislav"] Dans ce cas, je veux avoir la deuxième " Mislav "


Donc, s'il existe deux noms un nom d'un et d'un nom d'un de l'autre, la sortie résultante doit inclure le nom?


mmm ok bien qui change la portée. Je vais ajouter l'autre solution ci-dessus


L'utilisation d'intersections définies est une solution plus agréable et probablement un moyen plus rapide de trouver des articles dans les deux listes - SSSMING, vous ne vous souciez pas des répétitions.



0
votes

Votre logique est probablement imparfaite - bouclage à travers des indices lors de la suppression des articles est une recette de désastre.

Heureusement, votre problème peut facilement être résolu via la logique définie: P>

solution(["leo", "kiki", "eden"],["eden", "kiki"])
# ['leo']
solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"])
# ['vinko']


0 commentaires

0
votes

Une sélection plus optimisée et appropriée de la collection pour cela serait "SET". Voyez comment les lignes de code sont réduites !!

def solution(participant, completion):
    answer=set(participant).symmetric_difference(set(completion))
    #symmetric difference will do (AUB)-(AnB), which is what you need
    return list(answer)


solution(["leo", "kiki", "eden"],["eden", "kiki"])
solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"])


0 commentaires

1
votes

Vous ne pouvez pas obtenir de sortie car vous êtes une boucle itération seulement 2 fois, car la longueur de la liste d'achèvement est 2 uniquement et que vous traiez à la fois la liste des partitions et de l'achèvement afin que vos deux premiers éléments soient identiques. Par conséquent, cela n'exécutera pas de code à l'intérieur de votre bloc IF. Même chose pour le deuxième appel, cela ira déterrera une boucle seulement 4 fois.

Vous pouvez atteindre votre résultat attendu avec un code minimal en utilisant le jeu. Refermer la solution fournie par Tomothy32


0 commentaires

0
votes

Vous utilisez len (achèvement) dans la gamme de boucles pour la gamme de boucles qui est inférieure à la longueur du participant. Pourquoi rien n'est ajouté


0 commentaires

0
votes

Le problème est que vous triez LEO et Vinko va au dernier index de participant . Et vous bouclez jusqu'à ce que achèvement taille. Donc LEO et Vinko ne peut jamais vérifier. Vous pouvez essayer ceci: xxx


0 commentaires