Найти - Пользователи
Полная версия: Простой вопрос по синтаксису, квадратные скобки
Начало » Python для новичков » Простой вопрос по синтаксису, квадратные скобки
1 2 3
Senhion
Доброго времени суток.
Объясните пожалуйста почему выражение в 5-ой строке полностью взято в квадратные скобки?

from random import randint as rand
a = []
for i in range(7):
    c = []
    [c.append(rand(-10, 10)) for x in range(8)]
    a.append(c)
count = 0
for i in a:
    for x in i:
        if x < 0:
            count += 1
print("Число отрицательных элементов", count)
dimy44
Потому что этому коду место на govnokod.ru. Это пример, как писать не надо.
Senhion
Я тоже считаю, что раз взялся изучать питон - то буду следовать python-way …
Подскажите пожалуйста тогда как реализовать данный функционал правильно с точки зрения python?
fata1ex
Скажите, какую задачу вы решаете?

Посчитать количество отрицательных элементов в случайном списке можно, например, так:
>>> from random import randint
>>> len(filter(lambda x: x < 0, [randint(-10, 10) for _ in xrange(100)]))
57

>>> from random import randint
>>> integers = []
>>> for _ in xrange(100):
...     integer = randint(-10, 10)
...     integers.append(integer)
...     
>>> integers
[-6, 5, 1, 5, -1, -10, -9, 1, -7, 10, 3, 0, 7, 7, -6, 4, 10, 8, 5, 3, 1, 4, -8, 8, 9, -3, 6, 3, -2, 9, -3, -6, -1, -10, -8, 7, 1, -8, 7, 5, -8, 10, -1, 2, 2, 0
, -8, 3, 10, -7, 7, -2, -10, 7, 8, 7, 9, 7, -3, -7, 5, -5, 5, 4, -6, -2, -2, 10, 0, -2, 8, -4, -1, -3, 7, 4, -2, 5, -4, -9, -6, 8, -4, 0, 1, -8, 10, -4, 3, -6,
 9, -10, 0, 0, 9, 1, -6, 9, -7, 3]
>>> count = 0
>>> for integer in integers:
...     if integer < 0:
...         count += 1
...         
>>> count
42
Singularity
5. Это list compression. Есть описания в доке и в книжке Лутца.
int = randint(-10, 10)
>>> int =5
>>> int(4.555555555555555)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    int(4.555555555555555)
TypeError: 'int' object is not callable
>>> 
нехорошо

З.Ы. Меня угнетает не поддержка тега code с markdown настройками (
fata1ex
Спасибо, исправил.
dimy44
понятно что list compression, просто не вдаваясь в смысл всего кода, логичней было б
c = [rang(-10, 10) for x in xrange(8)]
вместо … Вместо как там.
Singularity

dimy44
>сегодня 15:18:59
Senhion Объясните пожалуйста почему выражение в 5-ой строке полностью взято в квадратные скобки?

Я и ответил.
fata1ex
Singularity
Это list compression
dimy44
понятно что list compression

Сжатие списков?
odnochlen
Senhion
Подскажите пожалуйста тогда как реализовать данный функционал правильно с точки зрения python?
Простой вариант влоб:
from random import randint as rand
a = []
for i in range(7):
    c = []
    for x in range(8):
        c.append(rand(-10, 10))
    a.append(c)
count = 0
for i in a:
    for x in i:
        if x < 0:
            count += 1
print("Число отрицательных элементов", count)

Посложнее:
from random import randint as rand
lst = [[randint(-10,10) for x in range(7)]  for y in range(8)]
count = sum(1 for l in lst for x in l if x<0)
print("Число отрицательных элементов", count)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB