Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что лучше осваивать. (Python or Ruby) 
:(
    Опции темы
kemiisto
  Дата 21.12.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Lazin @  21.12.2008,  18:26 Найти цитируемый пост)
да, в общем результат - новый список

Ну, если новый список, то можно, например, так:
Код

list = Array[1, 2, 5, 3, 7]
new_list = Array.new
list.each { |l| l.times { new_list.insert(-1, l) } }
p new_list


Добавлено через 9 минут и 3 секунды
Или так:
Код

list = Array[1, 2, 5, 3, 7]
new_list = Array.new
list.each { |l| new_list = new_list + Array.new(l) { l } }
p new_list



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Lazin
Дата 21.12.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Код

>>> lst = [1, 3, 4, 2, 5]
>>> def gen(lst):
...     for value in lst:
...             for j in range(value):
...                     yield value
>>> [x for x in gen(lst)]
[1, 3, 3, 3, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5]

 smile

Добавлено через 2 минуты и 8 секунд
хотя наверное можно и короче... сейчас что нибудь соображу.
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 21.12.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Код

i, a, b = 0, (1, 2, 3, 5, 7), []
for j in xrange(len(a)):
    p = a[j] == (i + 1) and (i + 1) or 1
    b += [a[j]] * p
    i += p



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 21.12.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Код

>>> [value for value in lst for _ in xrange(value)]
[1, 3, 3, 3, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5]


Это сообщение отредактировал(а) Lazin - 21.12.2008, 21:09
PM MAIL Skype GTalk   Вверх
Void
Дата 21.12.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Нате вам
Код

>>> from itertools import *
>>> s = [2, 3, 4]
>>> list(chain(*(repeat(x, x) for x in s)))
[2, 2, 3, 3, 3, 4, 4, 4, 4]



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
kemiisto
Дата 21.12.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Мне вариант Void'а понравился. smile А Ruby как? Разве не выразительно?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
powerfox
Дата 21.12.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(Lazin @  21.12.2008,  22:07 Найти цитируемый пост)
>>> [value for value in lst for _ in xrange(value)]
[1, 3, 3, 3, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5]

Пока я думал, ты написал похожий пример.
Код

[[i for x in range(i)] for i in list]

-----
Ой, немного не то делает ))



Это сообщение отредактировал(а) powerfox - 21.12.2008, 21:21


--------------------
user posted image
PM WWW   Вверх
kemiisto
Дата 21.12.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



MAKCim,  smile Нет, это слишком структурно. smile 

Lazin, smile если это
Цитата(Lazin @  21.12.2008,  19:07 Найти цитируемый пост)
[value for value in lst for _ in xrange(value)]

наглядно, то я даже и не знаю, что сказать! Хотя, оно и понятно, синтаксиса то я не знаю питоновского.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
powerfox
Дата 21.12.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(kemiisto @  21.12.2008,  22:12 Найти цитируемый пост)
Мне вариант Void'а понравился. smile

Он крут, как всегда smile


--------------------
user posted image
PM WWW   Вверх
kemiisto
  Дата 21.12.2008, 21:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(powerfox @  21.12.2008,  19:29 Найти цитируемый пост)
Он крут, как всегда

В споре, что круче, Python или Ruby, правильным ответом будет Void. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
powerfox
Дата 21.12.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(kemiisto @  21.12.2008,  22:33 Найти цитируемый пост)
В споре, что круче, Python или Ruby, правильным ответом будет Void. smile  

smile 

Это сообщение отредактировал(а) powerfox - 21.12.2008, 21:54


--------------------
user posted image
PM WWW   Вверх
Lazin
Дата 21.12.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(kemiisto @  21.12.2008,  21:15 Найти цитируемый пост)
наглядно, то я даже и не знаю, что сказать!

ну это называется list comprehensions, в принципе ничего сложного тут нет, в общем Python пока впереди smile 
вообще, что такое есть в руби, чего нет в питоне?
PM MAIL Skype GTalk   Вверх
powerfox
Дата 21.12.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(Lazin @  21.12.2008,  23:15 Найти цитируемый пост)
вообще, что такое есть в руби, чего нет в питоне? 

Смотрю на твою аватарку и думаю об этом  smile 


--------------------
user posted image
PM WWW   Вверх
Lazin
Дата 22.12.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



еще, кроме __таких__ имен в python туго с многострочными лямбдами, приходится создавать вложенную функцию, в руби таких проблем нет.
и еще есть проблема с локальными переменными при создании замыканий, вот мой надуманный пример
Код

def make_comp_fn(param):
    local = param
    def inner(a):
        if (a < local):
            print ("less")
        else:
            print ("more")
    return inner

vals = [1,2,3,4,11,12,13,14]
cf = make_comp_fn(11)
for i in vals:
    cf(i)

в обшем тут создается замыкание(closure),и все работает нормально, но, если попытаться изменить переменную local внутри функции inner то произойдет ошибка: UnboundLocalError: local variable 'local' referenced before assignment. что-бы это обойти нужно извращаться, например так:
Код

def make_comp_fn(param):
    local = [param]
    def inner(a):
        if (a < local[0]):
            print ("less")
            local[0] = 0
        else:
            print ("more")
    return inner

vals = [1,2,3,4,11,12,13,14]
cf = make_comp_fn(11)
for i in vals:
    cf(i)

а в python3k этой проблемы уже нет, благодаря новой конструкции языка - nonlocal:
Код

def make_comp_fn(param):
    local = param
    def inner(a):
        nonlocal local
        if (a < local):
            print ("less")
            local = 0
        else:
            print ("more")
    return inner

vals = [1,2,3,4,11,12,13,14]
cf = make_comp_fn(11)
for i in vals:
    cf(i)


Это сообщение отредактировал(а) Lazin - 22.12.2008, 09:33
PM MAIL Skype GTalk   Вверх
source777
Дата 22.12.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Void @  21.12.2008,  18:22 Найти цитируемый пост)
Что-о-о? Нет, насчёт «There should be one—and preferably only one—obvious way to do it.» © Python Zen всё верно. Но отнюдь не в ущерб скорости выполнения, напротив, только YARV недавно позволил Руби как-то тягаться с питоновским интерпретатором байт-кода.

Так я это и написал, что иногда в Питоне удобство программирования приносится в жертву скорости выполнения, т.е. скорость выполнения выигрывает за счёт частичной потери удобства(хотя удобство - вещь субъективная). А ты почему то понял эту мысль с точностью до наоборот...  smile 

P.S. Вот кстати пример на Ruby, тоже в одну строчку
Код

new_arr = arr.inject([]){ |sum, x| sum + Array.new(x, x) }


Это сообщение отредактировал(а) source777 - 22.12.2008, 14:54


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.