Iterarea peste o listă de numere întregi și alături de elemente bazate pe o condiție

0

Problema

Eu sunt încercarea de a repeta peste o listă de numere întregi și să li se alăture bazează pe o condiție utilizând biblioteca standard python. De exemplu, am o listă de numere întregi care arata astfel:

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

Aș dori pentru a parcurge această listă și de a combina valori astfel încât rezultatul va fi un șir de caractere de forma:

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

(în cazul în care linii sunt incluse). Condiția pentru aceasta este faptul că în cazul precedent, numărul nu este egal cu zero un strop trebuie să fie plasate în față. Dacă următoarea valoare este egală cu zero este alăturat la sfârșitul valoarea înainte.

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

Cel mai bun răspuns

2

Acest lucru ar ajuta: (Având în vedere numerele sunt pozitive în lista dată)

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

Procesul:

  1. Converti fiecare element negativ, în care:
    • 9 devine -9
    • 0 nu are efect de ca -0 este 0 în python
  2. Apoi de a le converti în siruri de caractere și să se alăture ei
  3. Asigurați-vă că pentru a elimina Trailing hyphen, în cazul nostru lstrip('-') ajută-ne cu asta.
2021-11-23 04:48:25

Vă rugăm să rețineți ceea ce ai făcut și de ce a lucrat. Acest lucru face mai bine pentru alții care ar putea veni peste această pagină mai târziu.
krmogi

Raspunsul tau ar putea fi îmbunătățit cu informații justificative suplimentare. Vă rugăm să editați pentru a adăuga mai multe detalii, cum ar fi citate sau documentația, astfel încât alții pot confirma că răspunsul este corect. Puteți găsi mai multe informații despre cum să scrie răspunsuri bune în centrul de ajutor.
Community
1

O abordare simplă, construirea unui șir de listă de numere întregi, urmată de un simplu regex înlocuire:

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

Concatenarea este ceea ce am gasit alții au făcut în scopul de a rezolva probleme similare cu aceasta. De fapt, eu sunt destul de sigur că am văzut-o soluție foarte similar cu acest lucru. Cred că un detaliu pe care am reușit să-l menționez este că valorile în această listă de numere întregi are capacitatea de a schimba cu orice valoare de la 0-9. Ce se întâmplă dacă a doua intrare din listă este acum un 1. oricum este acolo pentru a automatiza procesul de concatenare astfel că rezultatul ar fi acum #0-10-20-4-60-8000-1-9
42Dugg

@Dugg am actualizat cu un alt răspuns.
Tim Biegeleisen

Acest lucru, precum și un alt răspuns mai sus lucrari de mare, cu toate acestea, în cazul în care lista este schimbat, astfel încât prima intrare din listă este acum un 1, rezultatul este #-100-20-4-60-8000-1-9 în cazul în care un dash este, din păcate, plasate la începutul. Există vreo modalitate de a elimina acest de la întâmplă astfel că rezultatul ar fi #100-20-4-60-8000-1-9? De asemenea, o tonă de a ajuta atât de mult cu acest lucru. Vă Mulțumesc!
42Dugg

@42Dugg Verifica răspunsul. Putem adăuga un efect pozitiv lookbehind care afirmă că sunt întrerupte doar de adăugat pentru alte caractere decât primul.
Tim Biegeleisen
0

Aici este o soluție simplă:

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

Pentru fiecare element din listă, vom verifica dacă elementul nu este egal cu 0. Dacă nu e egal cu 0, vom imprima element cu o liniuță în față, și de a folosi end parametru pentru a evita noi linii. Dacă este 0, noi pur și simplu imprima articol.

2021-11-23 04:35:53
0

Folosind o buclă:

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

Aceasta funcționează bine, cu toate acestea, în cazul în care lista este schimbat, astfel încât prima intrare din listă este acum un 1, rezultatul este #-100-20-4-60-8000-1-9 în cazul în care un dash este, din păcate, plasate la începutul. Există vreo modalitate de a elimina acest de la întâmplă astfel că rezultatul ar fi #100-20-4-60-8000-1-9? Multumesc!!!
42Dugg

Îmi pare rău pentru lipsa asta de margine de caz. Putem adăuga pur și simplu o condiție pentru a sări peste primul număr. Am editat codul în consecință.
Tyler Liu

În alte limbi

Această pagină este în alte limbi

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