Iterar a través de una lista de enteros y unión de elementos en función de una condición

0

Pregunta

Estoy tratando de iterar a través de una lista de enteros y a unirse a ellos basados en una condición de uso de la biblioteca estándar de python. Por ejemplo, tengo una lista de enteros que se ve como tal:

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

Me gustaría recorrer a través de esta lista y combinar valores tales que el resultado iba a ser una serie de la forma:

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

(donde los guiones están incluidos). La condición para esto es que si el anterior no es igual a cero un guión debe ser colocado en frente de ella. Si el siguiente valor es igual a cero se unió a la final del valor antes.

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

Mejor respuesta

2

Esto podría ayudar a: (Teniendo en cuenta los números son positivos en la lista)

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

El proceso:

  1. Convertir cada elemento negativo, en el que:
    • 9 se convierte en -9
    • 0 no tiene ningún efecto como -0 es 0 en python
  2. Luego convertirlos en cadenas y únete a ellos
  3. Asegúrese de quitar Tirados hyphenen nuestro caso , en lstrip('-') nos ayuda con eso.
2021-11-23 04:48:25

Por favor, tenga en cuenta lo que hizo y por qué funcionaba. Esto hace que sea mejor para los otros, que puede venir a través de esta página más adelante.
krmogi

Su respuesta podría ser mejorado con la información adicional de respaldo. Por favor editar para añadir más detalles, tales como las citas o la documentación, para que otros puedan confirmar que su respuesta es correcta. Usted puede encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.
Community
1

Un enfoque directo, la construcción de una cadena a partir de la lista de números enteros, seguido por una simple expresión de reemplazo:

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 concatenación es lo que he encontrado otros lo hicieron con el fin de resolver problemas similares a este. De hecho, estoy bastante seguro de que he visto una solución muy similar a este. Supongo que uno de los detalles me olvidó mencionar es que los valores dentro de esta lista de números enteros tiene la capacidad de cambiar cualquier valor del 0-9. ¿Qué sucede si la segunda entrada de la lista es ahora 1. existe de todos modos para automatizar la concatenación proceso de tal manera que el resultado sería ahora #0-10-20-4-60-8000-1-9
42Dugg

@Dugg he actualizado con otra respuesta.
Tim Biegeleisen

Esto, así como otra respuesta por encima de las grandes obras, sin embargo, si la lista es cambiado de tal forma que la primera entrada de la lista es ahora un 1, el resultado es #-100-20-4-60-8000-1-9 cuando un guión es, lamentablemente, se coloca al principio. Hay alguna forma de eliminar que suceda tal de que el resultado sería #100-20-4-60-8000-1-9? También ha sido una tonelada de ayuda tan lejos con esto. Gracias!
42Dugg

@42Dugg Comprobar la actualización de la respuesta. Podemos añadir un positivo lookbehind que afirma que los guiones son sólo agregado de caracteres distinta de la primera.
Tim Biegeleisen
0

Aquí es una solución muy sencilla:

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="")

Para cada elemento de la lista, comprueba si el elemento no es igual a 0. Si no es igual a 0, se imprima el elemento con un guión delante de él, y el uso de la end parámetro para evitar nuevas líneas. Si es 0, se imprima el elemento.

2021-11-23 04:35:53
0

El uso de un bucle:

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

Esto funciona de maravilla, sin embargo, si la lista es cambiado de tal forma que la primera entrada de la lista es ahora un 1, el resultado es #-100-20-4-60-8000-1-9 cuando un guión es, lamentablemente, se coloca al principio. Hay alguna forma de eliminar que suceda tal de que el resultado sería #100-20-4-60-8000-1-9? Gracias!
42Dugg

Lo siento por falta de casos de borde. Simplemente podemos agregar una condición a saltar el primer número. He editado el código que corresponda.
Tyler Liu

En otros idiomas

Esta página está en otros idiomas

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