7. for loop

7.1. Syntax

7.1.1. No context syntax

Code Listing 7.1. for loop syntax
for ... in ... :
    ...

7.1.2. Generic syntax

Code Listing 7.2. for loop generic syntax
for my_variable in ITERATOR:
    print(my_variable)

7.1.3. Example

Code Listing 7.3. for loop syntax: printing each number from list
DATA = [1, 2, 3]

for number in DATA:
    print(number)

# 1
# 2
# 3
Code Listing 7.4. for loop syntax: data can be inline
for number in [1, 2, 3]:
    print(number)

# 1
# 2
# 3
Code Listing 7.5. for loop syntax: data can be inline
for number in range(0, 5):
    print(number)

# 0
# 1
# 2
# 3
# 4

7.2. Iterating over str

  • Iterating str will get character on each iteration
Code Listing 7.6. Iterating over str
for character in 'setosa':
    print(character)

# s
# e
# t
# o
# s
# a

7.3. Iterating simple collections

7.3.1. Iterating over list

Code Listing 7.7. Iterating over list
DATA = [5.1, 3.5, 1.4, 0.2, 'setosa']

for element in DATA:
    print(element)

# 5.1
# 3.5
# 1.4
# 0.2
# 'setosa'

7.3.2. Iterating over tuple

Code Listing 7.8. Iterating over tuple
DATA = (5.1, 3.5, 1.4, 0.2, 'setosa')

for element in DATA:
    print(element)

# 5.1
# 3.5
# 1.4
# 0.2
# 'setosa'

7.3.3. Iterating over set

Code Listing 7.9. Iterating over set
DATA = {5.1, 3.5, 1.4, 0.2, 'setosa'}

for element in DATA:
    print(element)

# 5.1
# 3.5
# 1.4
# 0.2
# 'setosa'

7.3.4. Loops with range

  • range(0, 5) will generate (0, 1, 2, 3, 4)
Code Listing 7.10. Loops with range
for number in range(0, 5):
    print(number)

# 0
# 1
# 2
# 3
# 4

7.3.5. Create dict from two list

Code Listing 7.11. Create dict from two list
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
output = {}

for i, element in enumerate(keys):
    key = keys[i]
    value = values[i]
    output[key] = value

print(output)
# {
#     'a': 1,
#     'b': 2,
#     'c': 3,
#     'd': 4,
# }

7.3.6. else

hostnames = {}

for line in content:

    ip, *hosts = line.strip().split()

    for record in hostnames:
        if record['ip'] == ip:
            record['hostnames'] += hosts
            break
    else:
        hostnames.append({
            'hostnames': set(hosts),
            'protocol': 'IPv4' if '.' in ip else 'IPv6',
            'ip': ip,
        })

7.4. Assignments

7.4.1. Counter

  • Filename: for_counter.py
  • Lines of code to write: 5 lines
  • Estimated time of completion: 5 min
  1. Dane są liczby na listingu Code Listing 7.12.

  2. Policz ile jest wystąpień każdej z cyfr w tej liście

  3. Zwróć counter: Dict[int, int]

    • klucz - cyfra
    • wartość - ilość wystąpień
The whys and wherefores:
 
  • Definiowanie i korzystanie z dict z wartościami
  • Iterowanie po liście
Code Listing 7.12. Numbers for dict counter
[1, 4, 6, 7, 4, 4, 4, 5, 1, 7, 0,
 0, 6, 5, 0, 0, 9, 7, 0, 4, 4, 8,
 2, 4, 0, 0, 1, 9, 1, 7, 8, 8, 9,
 1, 3, 5, 6, 8, 2, 8, 1, 3, 9, 5,
 4, 8, 1, 9, 6, 3]

7.4.2. Digit Segmentation

  • Filename: for_segmentation.py
  • Lines of code to write: 5 lines
  • Estimated time of completion: 10 min
  1. Dane są liczby na listingu Code Listing 7.13.

  2. Policz ile jest wystąpień każdej z grup w tej liście

    • grupa cyfr małe: cyfry z przedziału [0-2]
    • grupa cyfr średnie: cyfry z przedziału [3-7]
    • grupa cyfr duże: cyfry z przedziału [8-9]
  3. Zwróć counter: Dict[str, int]

    • klucz - grupa
    • wartość - ilość wystąpień
The whys and wherefores:
 
  • Definiowanie i korzystanie z dict z wartościami
  • Iterowanie po liście
Code Listing 7.13. Numbers for dict counter
[1, 4, 6, 7, 4, 4, 4, 5, 1, 7, 0,
 0, 6, 5, 0, 0, 9, 7, 0, 4, 4, 8,
 2, 4, 0, 0, 1, 9, 1, 7, 8, 8, 9,
 1, 3, 5, 6, 8, 2, 8, 1, 3, 9, 5,
 4, 8, 1, 9, 6, 3]

7.4.3. Get elements from nested data structure

  • Filename: for_nested.py
  • Lines of code to write: 7 lines
  • Estimated time of completion: 10 min
  1. Na podstawie DATA z Code Listing 7.14.
  2. Po odrzuceniu nagłówka iteruj po danych
  3. Wyświetl na ekranie nazwy gatunków zaczynające się na “v”.
Code Listing 7.14. Iris sample dataset
DATA = [
    ('Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'),
    (5.8, 2.7, 5.1, 1.9, {'species': 'virginica'}),
    (5.1, 3.5, 1.4, 0.2, {'species': 'setosa'}),
    (5.7, 2.8, 4.1, 1.3, {'species': 'versicolor'}),
    (6.3, 2.9, 5.6, 1.8, {'species': 'virginica'}),
    (6.4, 3.2, 4.5, 1.5, {'species': 'versicolor'}),
    (4.7, 3.2, 1.3, 0.2, {'species': 'setosa'}),
    (7.0, 3.2, 4.7, 1.4, {'species': 'versicolor'}),
    (7.6, 3.0, 6.6, 2.1, {'species': 'virginica'}),
    (4.6, 3.1, 1.5, 0.2, {'species': 'setosa'}),
]

7.4.4. Text analysis

  • Filename: for_text_analysis.py
  • Lines of code to write: 10 lines
  • Estimated time of completion: 10 min
  1. Dany jest tekst przemówienia John F. Kennedy’ego “Moon Speech” wygłoszony na Rice Stadium Code Listing 7.15.

  2. Zdania oddzielone są kropkami

  3. Każde zdanie oczyść z białych znaków na początku i końcu

  4. Wyrazy oddzielone są spacjami

  5. Policz ile jest wyrazów w każdym zdaniu

  6. Wypisz na ekranie słownik o strukturze:

    • Dict[str, int]
    • klucz: zdanie
    • wartość: ilość wyrazów
  7. Na końcu wypisz także ile jest łącznie w całym tekście:

    • przysłówków (słów zakończonych na “ly”)
    • zdań
    • słów
    • znaków (łącznie ze spacjami wewnątrz zdań, ale bez kropek)
Co zadanie sprawdza:
 
  • Dzielenie stringów
  • Sprawdzanie długości ciągów znaków
  • Iterowanie po elementach listy
  • Nazywanie zmiennych
Code Listing 7.15. “Moon Speech” by John F. Kennedy, Rice Stadium, Houston, TX, 1962-09-12 [1]
We choose to go to the Moon. We choose to go to the Moon in this decade and do the other things. Not because they are easy, but because they are hard. Because that goal will serve to organize and measure the best of our energies and skills. Because that challenge is one that we are willing to accept. One we are unwilling to postpone. And one we intend to win