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"])
7 Réponses :
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"]))
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. P>
J'espère que cela aide :) p> la solution pour inclure des noms de double. Comme demandé dans les commentaires ci-dessous: p> 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) P> P>
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.
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']
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"])
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. P>
Vous pouvez atteindre votre résultat attendu avec un code minimal en utilisant le jeu. Refermer la solution fournie par Tomothy32 P>
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é p>
Le problème est que vous triez LEO code> et Vinko code> va au dernier index de participant code>. Et vous bouclez jusqu'à ce que achèvement code> taille. Donc LEO code> et Vinko code> ne peut jamais vérifier.
Vous pouvez essayer ceci:
Utilisez ZIP
Parce que vous seul itérer
achèvement code> qui est une liste plus courte queparticipant code>, vous ne voyez donc jamaisLeo code> ouVinko code>.