python, cool & ugly |
16 листопада 2017 08:22:25 IP/Host: ---.home.cgocable.net
|
Re: python, cool & ugly |
16 листопада 2017 08:37:29 IP/Host: ---.la.net.ua
|
Re: python, cool & ugly |
16 листопада 2017 08:56:24 IP/Host: ---.home.cgocable.net
|
а що ти хотів отримати?
створив генератор з міліардом ітерацій і пробуєш пройти черех них, а воно триває довго.
Re: python, cool & ugly |
16 листопада 2017 08:56:25 IP/Host: 79.173.153.---
|
Re: python, cool & ugly |
16 листопада 2017 09:01:02 IP/Host: ---.home.cgocable.net
|
Це в python3? В трійці я б очікував, що таке працює.
Re: python, cool & ugly |
16 листопада 2017 09:26:34 IP/Host: ---.dyn.telefonica.de
|
Re: python, cool & ugly |
16 листопада 2017 09:32:42 IP/Host: ---.home.cgocable.net
|
range(10000000000) слишком большой список получается, в память не влазит. Лучше вот так делать -
def f(x):
return range(x)
c = [x*x for x in f(5) if x < 5]
Re: python, cool & ugly |
16 листопада 2017 09:36:04 IP/Host: ---.dyn.telefonica.de
|
Розгорнути попередні цитати...range(10000000000) слишком большой список получается, в память не влазит. Лучше вот так делать -
def f(x):
return range(x)
c = [x*x for x in f(5) if x < 5]range не створює жодного списку, лише ітератор, дивися мій пост вище, це працює без проблем:
>>> for x in range(10000000000):
... if (x > 3): break
... else: print(x)
Re: python, cool & ugly |
16 листопада 2017 09:42:12 IP/Host: ---.home.cgocable.net
|
Re: python, cool & ugly |
16 листопада 2017 11:00:45 IP/Host: ---.231.180.120.freenet.com.ua
|
Розгорнути попередні цитати...а що ти хотів отримати?
створив генератор з міліардом ітерацій і пробуєш пройти черех них, а воно триває довго.Я думав, що yield видає елементи на вимогу. Як range в версії 3.
Re: python, cool & ugly |
16 листопада 2017 12:08:09 IP/Host: 91.209.36.---
|
Re: python, cool & ugly |
16 листопада 2017 12:53:03 IP/Host: ---.codiac.de
|
import itertools
print([x*x for x in list(itertools.islice(range(10000000000),0,5,1))])
Бажаю удачі.
Re: python, cool & ugly |
16 листопада 2017 13:11:56 IP/Host: 91.209.36.---
|
Розгорнути попередні цитати...import itertools
print([x*x for x in list(itertools.islice(range(10000000000),0,5,1))])
Бажаю удачі.Та же проблема с памятью.
Я пробовал такое решение,
print(next(iter(())) if x >= 5 else x*x for x in range(10000000000))
но всё равно, память перегружается созданым списком.
Re: python, cool & ugly |
16 листопада 2017 13:15:53 IP/Host: ---.codiac.de
|
Розгорнути попередні цитати...import itertools
print([x*x for x in list(itertools.islice(range(10000000000),0,5,1))])
Бажаю удачі.Та же проблема с памятью.
Я пробовал такое решение,
print(next(iter(())) if x >= 5 else x*x for x in range(10000000000))
но всё равно, память перегружается созданым списком.у цьому варіанті
[x*x for x in list(itertools.islice(range(10000000000),0,5,1))]
немає проблеми з пам'яттю
т.я. оце
itertools.islice(range(10000000000),0,5,1))
вам уже легесенько зробить зріз з 5-ти елементів від нуля з кроком один з тих 10-ти мільярдів і не буде генерувати список з усіх елементів.
а потім загорне то в список
list(itertools.islice(range(10000000000),0,5,1))
а далі в квадрати зводити - то дрібниці
елемент списку в пітоні потребує приблизно n * <розмір вказівника> байтів
у вас 10 мільярдів елементів замовляється
10000000000 * 4 = 40000000000 байт - приблизно 39 мегабайт
якщо ви хочете знизити споживання пам'яті то слід дивитись на array, numpy.array
там можна виграти в 4-ри 8-м разів по пам'яті.
Ще раз бажаю удачі.
ЗІ.
І, я не пітонщик.
Пітон в мене то хоббі невеличке.
Re: python, cool & ugly |
16 листопада 2017 21:27:23 IP/Host: 142.201.5.---
|
>>> def f():
... for x in range(10000000000): yield x
...
>>> [x*x for x in f() if x < 5]
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
File "<stdin>", line 2, in f
KeyboardInterrupt
Re: python, cool & ugly |
16 листопада 2017 22:25:23 IP/Host: ---.volia.net
|
Розгорнути попередні цитати...>>> def f():
... for x in range(10000000000): yield x
...
>>> [x*x for x in f() if x < 5]
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
File "<stdin>", line 2, in f
KeyboardInterruptДо речі, наступне працює, значить проблема не з yield, a з list comprehension...
>>> for x in f():
... if x > 5: break
... else: print(x)
Re: python, cool & ugly |
17 листопада 2017 00:44:35 IP/Host: ---.home.cgocable.net
|
Розгорнути попередні цитати...>>> def f():
... for x in range(10000000000): yield x
...
>>> [x*x for x in f() if x < 5]
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
File "<stdin>", line 2, in f
KeyboardInterruptДо речі, наступне працює, значить проблема не з yield, a з list comprehension...
>>> for x in f():
... if x > 5: break
... else: print(x)
мабуть ви думаєте, чому list comprehension витягує всі значення з генератора f()?
ну він же не знає, що там буде зростаюча послідовність
та і не має цього знати
от йому і потрібні всі значення генератора і тільки потім він витягне ті значення, що відповідають умові if x < 5
а далі - все просто, тобто те що ви хочете з тим зрізом зробити
Re: python, cool & ugly |
17 листопада 2017 09:37:38 IP/Host: 91.209.36.---
|
Re: python, cool & ugly |
17 листопада 2017 10:32:45 IP/Host: ---.play-internet.pl
|
Re: python, cool & ugly |
17 листопада 2017 11:31:06 IP/Host: 91.209.36.---
|
насколько все же некомфортно для глаз выглядит код на пайтоне.... фигурные скобки в других языка мне всегда нравились больше
Re: python, cool & ugly |
19 листопада 2017 05:02:45 IP/Host: ---.home.cgocable.net
|
Розгорнути попередні цитати...насколько все же некомфортно для глаз выглядит код на пайтоне.... фигурные скобки в других языка мне всегда нравились большеЩо скажете?
Комфортніше аніж:
[i*i for i in itertools.takewhile(lambda x: x<5, range(10000000000))]