Pieniä kysymyksiä ohjelmoinnista

Piti oikein etsiä, kun Pythonia en tunne: "list comprehension" on näköjään nimi tuolle num + op for num, op in data
Ei ole, jos ympärillä ei ole hakasulkuja. Jos ympärillä on tavalliset sulut, niin se on "generator expression", joka on tavallaan "laiska list comprehension", eli operaatiot suoritetaan vasta silloin kun niitä tarvitaan, ja sitä kokonaista uutta listaa ei koskaan muodosteta.
 
Ei ole, jos ympärillä ei ole hakasulkuja. Jos ympärillä on tavalliset sulut, niin se on "generator expression", joka on tavallaan "laiska list comprehension", eli operaatiot suoritetaan vasta silloin kun niitä tarvitaan, ja sitä kokonaista uutta listaa ei koskaan muodosteta.
Eivätkö nuo sulut kuulu Stringin join() metodille?

Sama se, jännää:
Python:
>>> a = [2,3,4,5]
>>> val ** 2 for val in a
  File "<stdin>", line 1
    val ** 2 for val in a
             ^
SyntaxError: invalid syntax
>>> (val ** 2 for val in a)
<generator object <genexpr> at 0x7fd90f97e9e0>
>>> [val ** 2 for val in a]
[4, 9, 16, 25]
>>> list(val ** 2 for val in a)
[4, 9, 16, 25]
>>> list((val ** 2 for val in a))
[4, 9, 16, 25]

C++23 imitoi:
C++:
#include <print>
#include <vector>
#include <ranges>
int main() {
  std::vector a{2,3,4,5};
  println("{:}", a | std::views::transform([](int n) { return n * n; }));
}
Tulos:
Koodi:
[4, 9, 16, 25]
 
Eivätkö nuo sulut kuulu Stringin join() metodille?

Sama se, jännää:
Python:
>>> a = [2,3,4,5]
>>> val ** 2 for val in a
  File "<stdin>", line 1
    val ** 2 for val in a
             ^
SyntaxError: invalid syntax
>>> (val ** 2 for val in a)
<generator object <genexpr> at 0x7fd90f97e9e0>
>>> [val ** 2 for val in a]
[4, 9, 16, 25]
>>> list(val ** 2 for val in a)
[4, 9, 16, 25]
>>> list((val ** 2 for val in a))
[4, 9, 16, 25]

C++23 imitoi:
C++:
#include <print>
#include <vector>
#include <ranges>
int main() {
  std::vector a{2,3,4,5};
  println("{:}", a | std::views::transform([](int n) { return n * n; }));
}
Tulos:
Koodi:
[4, 9, 16, 25]
Hyvä kysymys! Pythonissa on erikseen poikkeussääntö tilanteeseen, jossa generator expression on funktion/metodin ainut argumentti. Tällöin yhdet sulut riittää:
The parentheses can be omitted on calls with only one argument.
 

Statistiikka

Viestiketjuista
301 223
Viestejä
5 150 134
Jäsenet
81 948
Uusin jäsen
kärpässieni

Hinta.fi

Back
Ylös Bottom