Kirjoittaja Aihe: Python list ja tulostuskerrat  (Luettu 1143 kertaa)

ilkant

  • Käyttäjä
  • Viestejä: 1077
  • Kubuntu
    • Profiili
Python list ja tulostuskerrat
« : 25.10.22 - klo:19.51 »
Koneella Kubuntu 22.04 ja python verso 3.10.6. Kokeilin FaceBookissa esitettyä ohjelmaa.

Koodia: [Valitse]
list1 = [False,False,False,False,False]
for i in range(5):
    if i not in list1:
        print("Hello World")

Tulostui kaiketi se, mitä pitääkin. Modifioin sitten ohjelmaa tällaiseksi:

Koodia: [Valitse]
list1 = ["Kalkkuna",3,"padassa","kiehuu",'u']
for i in range(5):
    if i not in list1:
        print(i,"\t", list1[i])

Tulostui:
Koodia: [Valitse]
$ python fourlist3.py
0        Kalkkuna
1        3
2        padassa
4        u

Miksi neljättä listan indeksiä (tuossa numerointi sitten 3, koska lähtee nollasta) ei tulostu?

kamara

  • Käyttäjä
  • Viestejä: 2751
    • Profiili
Vs: Python list ja tulostuskerrat
« Vastaus #1 : 25.10.22 - klo:20.19 »
Tulostui kaiketi se, mitä pitääkin. Modifioin sitten ohjelmaa tällaiseksi:

Koodia: [Valitse]
list1 = ["Kalkkuna",3,"padassa","kiehuu",'u']
for i in range(5):
    if i not in list1:
        print(i,"\t", list1[i])

Tulostui:
Koodia: [Valitse]
$ python fourlist3.py
0        Kalkkuna
1        3
2        padassa
4        u

Miksi neljättä listan indeksiä (tuossa numerointi sitten 3, koska lähtee nollasta) ei tulostu?

Koska 3 löytyy listasta.

Elikkäs, jos lista olisi tällainen...
Koodia: [Valitse]
list1 = ["Kalkkuna",3,2,"kiehuu",'u']
for i in range(5):
    if i not in list1:
        print(i,"\t", list1[i])
... niin se tulostaa...
Koodia: [Valitse]
0        Kalkkuna
1        3
4        u

Koska sekä 2 että 3 löytyvät listasta: list1
« Viimeksi muokattu: 25.10.22 - klo:20.23 kirjoittanut kamara »

ilkant

  • Käyttäjä
  • Viestejä: 1077
  • Kubuntu
    • Profiili
Vs: Python list ja tulostuskerrat
« Vastaus #2 : 25.10.22 - klo:20.44 »
Koska 3 löytyy listasta.

Auts. Jotenkin arvasin, että vastaus on hyvin yksinkertainen, jota en vaan tullut ajatelleeksi.

SuperOscar

  • Käyttäjä
  • Viestejä: 3894
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python list ja tulostuskerrat
« Vastaus #3 : 25.10.22 - klo:20.45 »
Saattanet jo tietääkin, mutta lähes aina kun Python-aloittelija käyttää range()-funktiota for-silmukassa, hän tekee jotakin epäpythonmaista. Pythonisti kirjoittaa aina:

Koodia: [Valitse]
# Jos vain alkioilla on väliä
for item in list1:
    # …

# …tai jos indeksitkin tarvitaan:
for idx, item in enumerate(list1):
    # …
pöytäkone 1, kannettava 3: Debian GNU/Linux 11; pöytäkone 2: openSUSE Tumbleweed; kannettava 1: openSUSE Tumbleweed; kannettava 2: Neptune 7.5; RPi 1: Ubuntu 22.04 LTS; RPi 2: LibreELEC 10

kamara

  • Käyttäjä
  • Viestejä: 2751
    • Profiili
Vs: Python list ja tulostuskerrat
« Vastaus #4 : 26.10.22 - klo:11.59 »
Saattanet jo tietääkin, mutta lähes aina kun Python-aloittelija käyttää range()-funktiota for-silmukassa, hän tekee jotakin epäpythonmaista. Pythonisti kirjoittaa aina:

Koodia: [Valitse]
# Jos vain alkioilla on väliä
for item in list1:
    # …

# …tai jos indeksitkin tarvitaan:
for idx, item in enumerate(list1):
    # …

Joo ...
... sen perusteella olen itsekin aloittelija, ehkä range:n käyttö on yleistä, koska joissakin muissa kielissä (Esim. C/C++) käytetään yleisesti sen kaltaista rakennetta.

Itse luulen range:n käytön yleisyyteen vaikuttavan itselläni vain laiskuus.

Kuten palomieskin sanoisi:"Väärin sammutettu!"
 :P

Snufkin

  • Käyttäjä
  • Viestejä: 383
    • Profiili
Vs: Python list ja tulostuskerrat
« Vastaus #5 : 26.10.22 - klo:13.18 »
Saattanet jo tietääkin, mutta lähes aina kun Python-aloittelija käyttää range()-funktiota for-silmukassa, hän tekee jotakin epäpythonmaista. Pythonisti kirjoittaa aina:

Koodia: [Valitse]
# Jos vain alkioilla on väliä
for item in list1:
    # …

# …tai jos indeksitkin tarvitaan:
for idx, item in enumerate(list1):
    # …

Onhan tuolle range funktiolle muutakin käyttöä, vaikka säännöllisen [1,2,3,4,5...] listan luonti.

Itse olen käynyt vasta Pythonn alkeis ja jatkokurssin ja kyllä siellä tuo range oli yleisessä käytössä myös for-lauseissa, kun tarvitaan indeksointia.

Mitä etua tuo enumetrate tuo?

SuperOscar

  • Käyttäjä
  • Viestejä: 3894
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Python list ja tulostuskerrat
« Vastaus #6 : 27.10.22 - klo:11.30 »
Mitä etua tuo enumetrate tuo?

Alkio on suoraan käytettävissä tarvitsematta indeksoida säilöä (kuten tässä listaa). Totta kai range()-funktiolla on käyttönsä, mutta useimmiten sen näkee C:stä tai sen perillisistä siirtyvien Python-aloittelijoiden käytössä pienenä paljastavana tuntomerkkinä.
pöytäkone 1, kannettava 3: Debian GNU/Linux 11; pöytäkone 2: openSUSE Tumbleweed; kannettava 1: openSUSE Tumbleweed; kannettava 2: Neptune 7.5; RPi 1: Ubuntu 22.04 LTS; RPi 2: LibreELEC 10

Snufkin

  • Käyttäjä
  • Viestejä: 383
    • Profiili
Vs: Python list ja tulostuskerrat
« Vastaus #7 : 27.10.22 - klo:11.39 »
Mitä etua tuo enumetrate tuo?

Alkio on suoraan käytettävissä tarvitsematta indeksoida säilöä (kuten tässä listaa). Totta kai range()-funktiolla on käyttönsä, mutta useimmiten sen näkee C:stä tai sen perillisistä siirtyvien Python-aloittelijoiden käytössä pienenä paljastavana tuntomerkkinä.

Joskus kun niitä indeksejä tarvitaan, niin ainakin omasta mielestäni i ja j ovat melko havainnollisia. Tällöin listaa/listoja käydään läpi nimenomaan jossain tietyssä järjestyksessä. Tai jos käytössä talukko, niin taulukko(i, j) on melko selkeä ilmaisu.