Scorrendo una lista di interi e per la giunzione di elementi in base a una condizione

0

Domanda

Sto tentando di scorrere una lista di interi e di unirsi a loro in base a una condizione utilizzando python standard library. Per esempio, ho una lista di interi che si presenta come tale:

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

Vorrei scorrere l'elenco e combinare valori tali che il risultato sarebbe una stringa della forma:

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

(dove i trattini sono inclusi). La condizione è che se il precedente numero non è uguale a zero da un trattino deve essere posto di fronte ad essa. Se il valore successivo è uguale a zero, uniti alla fine del valore della prima.

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

Migliore risposta

2

Ciò consentirebbe di: (Considerando i numeri sono positivi in 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

Il processo:

  1. La conversione di ogni elemento negativo, in cui:
    • 9 diventa -9
    • 0 non ha alcun effetto -0 è 0 in python
  2. La conversione di stringhe e di unirsi a loro
  3. Assicurarsi di rimuovere Finale hyphennel nostro caso lstrip('-') ci aiuta in questo.
2021-11-23 04:48:25

Si prega di notare quello che hai fatto e perché ha funzionato. Questo rende meglio per gli altri che possono venire attraverso questa pagina successiva.
krmogi

La tua risposta potrebbe essere migliorato con ulteriori informazioni di supporto. Si prega di modifica per aggiungere ulteriori dettagli, come citazioni o documentazione, in modo che gli altri possono confermare che la tua risposta è corretta. Potete trovare ulteriori informazioni su come scrivere le risposte nel centro assistenza.
Community
1

Un approccio semplice e diretto, la costruzione di una stringa da un elenco di numeri interi, seguita da una espressione regolare semplice sostituzione:

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 concatenazione è quello che ho trovato in altri per risolvere problemi simili a questo. In realtà sono abbastanza sicuro che ho visto una soluzione molto simile a questo. Suppongo che è un dettaglio che ho omesso di dire è che i valori all'interno di questa lista di interi, ha la capacità di modificare qualsiasi valore da 0 a 9. Che cosa succede se la seconda voce dell'elenco è ora un 1. esiste un modo per automatizzare il processo di concatenazione tale che il risultato sarebbe ora #0-10-20-4-60-8000-1-9
42Dugg

@Dugg ho aggiornato con un'altra risposta.
Tim Biegeleisen

Questo, come anche un altro risposta di cui sopra funziona alla grande, tuttavia, se la lista è cambiata in modo tale che la prima voce dell'elenco è ora a 1, il risultato è #-100-20-4-60-8000-1-9 dove un trattino, purtroppo, è collocato all'inizio. C'è un modo per eliminare questo inconveniente tale che il risultato sarebbe #100-20-4-60-8000-1-9? Inoltre, vi è stato un sacco di aiuto con questo. Grazie!
42Dugg

@42Dugg Controllare aggiornato risposta. Siamo in grado di aggiungere un positivo lookbehind che afferma che i trattini sono aggiunte solo per i caratteri diversi rispetto alla prima.
Tim Biegeleisen
0

Ecco una semplice soluzione:

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

Per ogni elemento della lista, si controlla se l'elemento non è uguale a 0. Se non è uguale a 0, si stampa la voce con un pizzico di fronte, e utilizzare il end parametro per evitare nuove linee. Se è 0, abbiamo semplicemente stampare l'elemento.

2021-11-23 04:35:53
0

Utilizzo di un ciclo:

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

Questo funziona alla grande, tuttavia, se la lista è cambiata in modo tale che la prima voce dell'elenco è ora a 1, il risultato è #-100-20-4-60-8000-1-9 dove un trattino, purtroppo, è collocato all'inizio. C'è un modo per eliminare questo inconveniente tale che il risultato sarebbe #100-20-4-60-8000-1-9? Grazie!
42Dugg

Mi dispiace per i mancanti che in caso di bordo. Si può semplicemente aggiungere una condizione di saltare il primo numero. Ho modificato il codice di conseguenza.
Tyler Liu

In altre lingue

Questa pagina è in altre lingue

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