Python: comment faire pour voir si la liste contient des numéros consécutifs
Je veux tester si une liste contient des nombres entiers consécutifs et pas de répétition de chiffres.
Par exemple, si j'ai
l = [1, 3, 5, 2, 4, 6]
il doit retourner True.
Comment dois-je vérifier si la liste contient au plus n des nombres consécutifs sans modifier l'original de la liste?
J'ai pensé à propos de la copie de la liste et supprimer chaque numéro qui s'affiche dans la liste d'origine et si la liste est vide, alors il retournera True.
Est-il une meilleure façon de le faire?
Quelle devrait être la réponse dans votre exemple?
Je suis confus quant à pourquoi votre cas de test doit retourner
Sont les entrées des entiers? Sont-ils non-négative ou strictement positif?
En R il serait
Je suis confus quant à pourquoi votre cas de test doit retourner
True
, 5 et 2 ne sont pas consécutivesSont les entrées des entiers? Sont-ils non-négative ou strictement positif?
En R il serait
any(diff(sort(x)) == 1) & all(table(x) == 1)
mais je ne connais pas Python, de sorte que je suis intéressé à voir comment il pourrait être fait. Je suis en train de traduire dans la mesure du possible d'apprendre les deux.OriginalL'auteur allmine | 2015-11-06
Vous devez vous connecter pour publier un commentaire.
Pour l'ensemble de la liste, il devrait être aussi simple que de
Cela préserve la liste d'origine, mais en faire une copie (et puis tri) peut être coûteux si votre liste est particulièrement longue.
Noter qu'en Python 2, vous pouvez simplement utiliser le ci-dessous parce que
range
renvoyé unlist
objet. En 3.x et supérieur de la fonction a été modifié pour renvoyer unrange
objet, donc une conversion explicite àlist
est nécessaire avant de le comparer àsorted(l)
Pour vérifier si
n
entrées sont consécutifs et non répétitif, il devient un peu plus compliqué:cette solution n'est pas de modifier votre liste d'origine...
cette solution doit être tordu un peu plus. Le test est de vérifier si tous les nombres sont consécutifs. L'OP est de vérifier si 'n' sont consécutifs. Et puis vous devez ajouter une case pour la deuxième condition, "pas de répétition de chiffres".
Pour l'ensemble de la liste, doit-il pas être
sorted(l) == list(range(min(l), max(l)+1))
?oui pour Python 3.x et supérieur, vous avez besoin de la liste de conversion explicite. J'ai mis à jour ma réponse
OriginalL'auteur wnnmaw
Nous pouvons utiliser les mathématiques formule pour la vérification de consecutiveness,
En supposant min numéro de toujours commencer à partir de 1
[1,1,4,4,5]
Comme par question , il n'y a pas de répétition de chiffres. Oui si il y a des doublons, il ne fonctionnera pas comme vous l'avez mentionné.
La question demande un test consécutives non répétitives numéros. D'entrée pourrait être une liste d'entiers.
C'est malin, j'aime ça.
oui, vous avez besoin de dédoublonner la liste (facile) puis vérifiez ci-dessous si la fonction est vrai
maximum = max(l)
minimum=min(l)
sum(l) == maximum * (maximum + 1) / 2 -((minimum-1)*(minimum)/2)
OriginalL'auteur Shankar
Une fois que vous vérifiez que la liste n'a pas de doublons, juste calculer la somme des entiers compris entre
min(l)
etmax(l)
:OriginalL'auteur Blender
Nous testons les deux conditions, d'abord par trouver l'itératif différence de la liste triée
np.diff(sorted(l))
, nous pouvons tester si il y an
nombres entiers consécutifs. Enfin, nous testons si levalue_counts()
sont tous à 1, indiquant l'absence de répétitions.OriginalL'auteur Pierre Lafortune
Le premier code supprime les doublons, mais maintient l'ordre:
Le jeu suivant est d'identifier ceux qui sont dans l'ordre, les prises de ici:
l
sorties:1-2,4-6,3
Vous pouvez personnaliser les fonctions en fonction de votre sortie.
OriginalL'auteur Leb
- Je diviser votre requête en deux parties: partie d'Une "liste contient au plus n des nombres consécutifs" c'est la première ligne de
if len(l) != len(set(l)):
Et la partie b, divise la liste des possibles pour les courtes listes et vérifie s'ils sont consécutifs.
OriginalL'auteur PVNRT
Ici est vraiment très courte, solution de facilité, sans avoir à utiliser d'importations:
Cela fonctionne pour les listes numériques de n'importe quelle longueur et détecte les doublons.
Fondamentalement, vous êtes à la création d'un éventail de votre liste pourrait être, l'édition de cette gamme pour correspondre à votre liste de critères (longueur, valeur de départ) et de faire une comparaison de clichés. Je suis venu avec ce jeu de cartes, je suis de codage où j'ai besoin de détecter les lignes droites/s'exécute dans une main et il semble fonctionner assez bien.
OriginalL'auteur Bumperpants
OriginalL'auteur Hooman Tamimi
L'entrée de cette fonction est à votre liste.Cette fonction retourne False si le nombre de répétition.
Le code ci-dessous fonctionne même si la liste ne démarre pas avec 1.
OriginalL'auteur Alekhya Reddy