Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: ilkant - 25.10.22 - klo:19.51
-
Koneella Kubuntu 22.04 ja python verso 3.10.6. Kokeilin FaceBookissa esitettyä ohjelmaa.
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:
list1 = ["Kalkkuna",3,"padassa","kiehuu",'u']
for i in range(5):
if i not in list1:
print(i,"\t", list1[i])
Tulostui:
$ 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?
-
Tulostui kaiketi se, mitä pitääkin. Modifioin sitten ohjelmaa tällaiseksi:
list1 = ["Kalkkuna",3,"padassa","kiehuu",'u']
for i in range(5):
if i not in list1:
print(i,"\t", list1[i])
Tulostui:
$ 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...
list1 = ["Kalkkuna",3,2,"kiehuu",'u']
for i in range(5):
if i not in list1:
print(i,"\t", list1[i])
... niin se tulostaa...
0 Kalkkuna
1 3
4 u
Koska sekä 2 että 3 löytyvät listasta: list1
-
Koska 3 löytyy listasta.
Auts. Jotenkin arvasin, että vastaus on hyvin yksinkertainen, jota en vaan tullut ajatelleeksi.
-
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:
# Jos vain alkioilla on väliä
for item in list1:
# …
# …tai jos indeksitkin tarvitaan:
for idx, item in enumerate(list1):
# …
-
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:
# 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
-
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:
# 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?
-
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ä.
-
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.