Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2012 20:03:34

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

fata1ex
хз как переводится.
В математике так задают множества, но там без названия эта штука

Офлайн

#2 Авг. 14, 2012 21:23:31

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Я как бы к тому, что это list comprehension, а не compression.



Офлайн

#3 Авг. 14, 2012 21:28:15

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Без пафоса не прожить.

Офлайн

#4 Авг. 15, 2012 08:18:22

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Singularity
Это list compression. Есть описания в доке и в книжке Лутца.
Большое спасибо за ответ - именно то что и требовалось - дальше можно уже гуглить когда знаешь как это называется.

odnochlen
Посложнее:
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)
В задаче интересует реализация 2х моментов: 1) создание 2х мерного массива 2) подсчет отрицательных значений в нем. Извиняюсь что сразу не определил их в первом посте.
В задаче “посложнее” возникает вопрос: как при подсчете count реализован обход 2х мерного массива?
count = sum(1 for l in lst for x in l if x<0)

Отредактировано Senhion (Авг. 15, 2012 08:22:23)

Офлайн

#5 Авг. 15, 2012 15:07:11

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Senhion
В задаче “посложнее” возникает вопрос: как при подсчете count реализован обход 2х мерного массива?
Тебя абсолютно никто не заставляет использовать решения, которые ты не понимаешь (а с помощью функциональщины / списковых выражений в питоне этого можно достичь очень быстро).

count = sum(1 for l in lst for x in l if x<0)

Аналог в императивном стиле:
sum_lst = []
for l in lst:
    for x in l:
        if x < 0:
            sum_list.append(1)
# считает сумму элементов
count = sum(sum_lst)

Офлайн

#6 Авг. 15, 2012 17:35:03

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

odnochlen
Аналог в императивном стиле:
Это больше похоже на:
count = sum([1 for l in lst for x in l if x<0])

А этот пример
odnochlen
count = sum(1 for l in lst for x in l if x<0)
все-таки PEP 289 - Generator Expressions

Ссылки для ТС:
http://docs.python.org/tutorial/datastructures.html#list-comprehensions
http://www.python.org/dev/peps/pep-0202/
Senhion
как при подсчете count реализован обход 2х мерного массива?
http://docs.python.org/tutorial/datastructures.html#nested-list-comprehensions

Отредактировано reclosedev (Авг. 15, 2012 17:37:44)

Офлайн

#7 Авг. 15, 2012 18:05:48

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

reclosedev
Это больше похоже на:
Влом было генератор мутить. Но логика и так понятна.
List compehension от generator expression отличаются лишь квадратными скобками, так ведь?

Вот с генератором
def gen(lst):
    for l in lst:
        for x in l:
            if x < 0:
                yield(1)
# считает сумму элементов
count = sum(gen(lst))

Офлайн

#8 Авг. 16, 2012 06:41:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Senhion
В задаче интересует реализация 2х моментов: 1) создание 2х мерного массива 2) подсчет отрицательных значений в нем.
>>> matr = [[1, -1, 2, -2, 3], [1, -1, 2, -2, -3]]
>>> len([i for i in sum(matr, []) if i < 0])
5
>>>



Офлайн

#9 Авг. 16, 2012 15:51:13

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

Список не нужен.

py.user.next
sum(matr, [])
Как это работает?

256 нах!

Отредактировано odnochlen (Авг. 16, 2012 15:52:05)

Офлайн

#10 Авг. 17, 2012 01:32:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Простой вопрос по синтаксису, квадратные скобки

>>> help(sum)
>>> lst = [[1], [2]]
>>> sum(lst, [])
[1, 2]
>>>

odnochlen
Список не нужен.
для len() нужен список



Отредактировано py.user.next (Авг. 17, 2012 01:35:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version