Itérer sur une liste d'entiers et de joindre des éléments en fonction d'une condition

0

La question

Je suis d'essayer d'itérer sur une liste d'entiers et de se joindre à eux en fonction d'une condition à l'aide de l'python standard library. Par exemple, j'ai une liste d'entiers qui se présente comme tel:

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]

Je voudrais parcourir cette liste et de combiner des valeurs telles que le résultat serait une chaîne de la forme:

result = '000-20-4-60-8000-1-9'

(où les tirets sont inclus). La condition pour cela est que si la précédente nombre n'est pas égal à zéro, un tableau de bord doit être placé en face de lui. Si la valeur est égale à zéro, il est rejoint à la fin de la valeur avant.

integer iteration list python
2021-11-23 03:49:53
4

La meilleure réponse

2

Cela permettrait de: (En considérant les chiffres sont positifs dans la liste donnée)

def join(lst):
    return "".join(list(map(lambda x: str(-x), lst))).lstrip('-')

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]
print(join(listOfIntegers)) # 000-20-4-60-8000-1-9

Le processus:

  1. Convertir chaque élément négatif, dans lequel:
    • 9 devient -9
    • 0 n'a aucun effet -0 est 0 en python
  2. Puis de les convertir en chaînes et se joindre à eux
  3. Assurez-vous de retirer de Fuite hyphendans notre cas lstrip('-') nous aide avec cela.
2021-11-23 04:48:25

Veuillez noter ce que vous avez fait et pourquoi cela a fonctionné. Cela le rend plus agréable pour les autres qui peut venir à travers cette page plus tard.
krmogi

Votre réponse pourrait être amélioré avec des informations complémentaires. Veuillez modifier pour ajouter d'autres détails, comme le nombre de citations ou de la documentation, de sorte que d'autres peuvent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide.
Community
1

Une approche simple, la construction d'une chaîne à partir de la liste d'entiers, suivie par une simple expression régulière de remplacement:

listOfIntegers = [1, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]
inp = ''.join([str(x) for x in listOfIntegers])
result = re.sub(r'(?<=.)(?=[^\D0])', '-', inp)
print(result)  # 100-20-4-60-8000-1-9
2021-11-23 04:07:00

La concaténation est ce que j'ai trouvé d'autres dans le but de résoudre des problèmes similaires à ce. En fait, je suis assez sûr que j'ai vu une solution très similaire à cela. Je suppose qu'un détail, j'ai omis de mentionner, c'est que les valeurs à l'intérieur de cette liste d'entiers a la possibilité de modifier à n'importe quelle valeur de 0 à 9. Qu'advient-il si la deuxième entrée de la liste est maintenant un 1. est-il de toute façon à automatiser la concaténation processus de telle sorte que le résultat serait maintenant #0-10-20-4-60-8000-1-9
42Dugg

@Dugg j'ai mis à jour avec une autre réponse.
Tim Biegeleisen

Ainsi qu'une autre réponse ci-dessus fonctionne très bien, cependant, si la liste est modifiée de façon à ce que la première entrée de la liste est maintenant un 1, le résultat est #-100-20-4-60-8000-1-9 où un tableau de bord est malheureusement placé au tout début. Est-il possible de l'éliminer que de se produire, tels que le résultat serait #100-20-4-60-8000-1-9? Aussi, vous avez été une tonne d'aide pour l'instant avec cette. Merci!!!!
42Dugg

@42Dugg Vérifier la mise à jour de réponse. Nous pouvons ajouter lookbehind qui affirme que les tirets ne sont ajoutés pour les caractères autres que la première.
Tim Biegeleisen
0

Voici une solution simple:

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]

for i in listOfIntegers:
    if i != 0:
        print("-" + str(i), end="")
    else:
        print(str(i), end="")

Pour chaque élément de la liste, on vérifie si l'élément n'est pas égal à 0. Si elle n'est pas égal à 0, nous imprimons l'article avec un tableau de bord en face de lui, et l'utilisation de la end paramètre pour éviter de nouvelles lignes. Si c'est 0, il suffit d'imprimer l'article.

2021-11-23 04:35:53
0

À l'aide d'une boucle:

def func(nums):
    result = ''
    for i, num in enumerate(nums):
        if num != 0 and i != 0:
            result += '-'
        result += str(num)
    return result
2021-11-23 03:55:07

Cela fonctionne bien, cependant, si la liste est modifiée de façon à ce que la première entrée de la liste est maintenant un 1, le résultat est #-100-20-4-60-8000-1-9 où un tableau de bord est malheureusement placé au tout début. Est-il possible de l'éliminer que de se produire, tels que le résultat serait #100-20-4-60-8000-1-9? Merci!
42Dugg

Désolé pour le manque de bord de cas. Il suffit d'ajouter une condition d'ignorer le premier numéro. J'ai édité le code en conséquence.
Tyler Liu

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................