Iterating cez zoznam celé čísla a spájanie položky na základe podmienky

0

Otázka

Snažím sa iterovať cez zoznam celé čísla a zapojiť ich na základe podmienky pomocou python štandardné knižnice. Napríklad, mám zoznam celé čísla, ktoré vyzerá rovnako, ako napr:

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

Ja by som chcel iterovať cez tento zoznam a kombinovať hodnoty, ako je, že výsledkom bude reťazec v tvare:

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

(ak pomlčky sú súčasťou balenia). Podmienkou pre to je, že ak predchádzajúce číslo nie je rovná nule pomlčka, musí byť umiestnený pred ním. Ak budúci hodnota je rovná nule je pripojený na koniec hodnoty pred ním.

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

Najlepšiu odpoveď

2

To by pomohlo: (Vzhľadom čísla sú pozitívne v danom zozname)

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

Proces:

  1. Previesť každý prvok na negatívny, v ktorom:
    • 9 stáva -9
    • 0 nemá žiadny účinok ako -0 je 0 v jazyku python
  2. Potom previesť ich do reťazcov a ich spojiť
  3. Uistite sa, že odstrániť Trailing hyphenv našom prípade lstrip('-') pomáha nám s tým.
2021-11-23 04:48:25

Prosím, všimnite si, čo si robil a prečo to fungovalo. Je to lepšie pre iných, ktorí môžu prísť cez túto stránku neskôr.
krmogi

Vaša odpoveď by mohla byť lepšie s dodatočné podporné informácie. Prosím, upraviť , ak chcete pridať ďalšie detaily, ako počet citácií alebo dokumentácie, takže ostatní môžu potvrdiť, že vaša odpoveď je správna. Viac informácií môžete nájsť informácie o tom, ako napísať dobrý odpovede v centre pomoci.
Community
1

Jednoduchý prístup, budovanie string zo zoznamu celé čísla, nasleduje jednoduchý regulárny výraz výmena:

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

Zreťazenie je to, čo som našiel, iní robili s cieľom vyriešiť problémy podobné ako toto. V skutočnosti som si istá, že som videl riešenie veľmi podobnú tejto. Myslím, že jeden detail, ktorý som nedokázal spomenúť, je, že hodnoty v rámci tohto zoznamu celé čísla má schopnosť zmeniť ľubovoľnú hodnotu od 0-9. Čo sa stane, ak druhá položka zoznamu je teraz 1. je tam aj tak na automatizáciu zreťazenie proces tak, aby výsledkom by byť teraz #0-10-20-4-60-8000-1-9
42Dugg

@Dugg som aktualizoval s iným odpoveď.
Tim Biegeleisen

Tento, ako aj ďalšie odpoveď nad funguje skvele, ak sa však v zozname sa zmení tak, že prvú položku v zozname, je teraz 1, výsledok je #-100-20-4-60-8000-1-9 ak dash bohužiaľ je umiestnený na samom začiatku. Existuje nejaký spôsob, ako eliminovať, že sa deje tak, že výsledkom bude #100-20-4-60-8000-1-9? Tiež ste boli tony pomôcť tak ďaleko, s tým. Ďakujeme!
42Dugg

@42Dugg Skontrolujte aktualizované odpoveď. Môžeme pridať pozitívny lookbehind, ktorý tvrdí, že pomlčky sú len pridané na iných znakov ako prvý.
Tim Biegeleisen
0

Tu je jednoduché riešenie:

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

Pre každú položku v zozname, sme skontrolujte, či tovar nie je rovná 0. Ak to nie je rovná 0, sme vytlačiť položky s pomlčkou pred ním, a použitie end parametrom aby sa zabránilo nové riadky. Ak je 0, sme jednoducho vytlačiť položky.

2021-11-23 04:35:53
0

Pomocou slučky:

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

Toto funguje skvele, ak sa však v zozname sa zmení tak, že prvú položku v zozname, je teraz 1, výsledok je #-100-20-4-60-8000-1-9 ak dash bohužiaľ je umiestnený na samom začiatku. Existuje nejaký spôsob, ako eliminovať, že sa deje tak, že výsledkom bude #100-20-4-60-8000-1-9? Vďaka!
42Dugg

Ospravedlňujeme sa za chýbajúce, že okraji prípade. Môžeme jednoducho pridať podmienku preskočiť prvé číslo. Som upravili kód zodpovedajúcim spôsobom.
Tyler Liu

V iných jazykoch

Táto stránka je v iných jazykoch

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