−99
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
for i in range(0,len(m)):
if i==0:
f=False
s += x[m[i]]
else:
if i==len(m)-1:
if not f:
f=False
s += ',' + x[m[i]]
else:
f=False
s += x[m[i]]
break
else:
if m[i]-m[i-1]==1:
if m[i+1]-m[i]==1:
if not f:
f=True
s += '-'
continue
else:
continue
else:
if not f:
f=False
s += ',' + x[m[i]]
else:
f=False
s += x[m[i]]
else:
f=False
s += ','+x[m[i]]
Была задача: на вход(m) подается массив чисел, например [1,3,5,6,7], а на выходе получаем человекочитаемую строку(s) "пн,ср,пт-вс"
Вышло такое из меня пару месяцев назад, теперь я никогда не смогу в нем разобраться х_х
Запостил:
MAaxim91,
05 Февраля 2014
http://ideone.com/GOA8ce
Почти поймал!
Не айс :)
sorted()?
Кто-то еще не знает про from __future__ import unicode_literals?
>map={}
Опасно, хоть и он используется только для чтения.
Плюсанул за то, что хоть кто-то разбил на функции.
>from __future__ import unicode_literals
Это с какой версии? 2.6? а потом уже но так длиннее и несколько менее очевидно.
Понятно тебе как автору, менее очевидно для делающего code review.
>но так длиннее и несколько менее очевидно.
ПИТОНОПРОБЛЕМЫ. В соседнем гк спрашивал - а нахуя вообще эту "фичу" сделали?
>Это с какой версии? 2.6?
Да, а что? Бер 2.5 <= еще кто-то жить не может? Уже 3.4 есть.
А третий Питон вообще больной вопрос. Надо что ли опять проверить нужные мне либы на совместимость...
Ну ни хуя себе "изменения". Ты походу питоном нечасто пользуешься.
Я тоже разбивал, см. выше ;)
P.S. Но у меня как-то упорото получилось...
С одним циклом и минимумом математики.
Wut?
Такого, правда, в исходной задаче не было, но все равно нехорошо.
Получается очень многословно... жаль, что в Питоне нельзя со списками как со списками работать, можно было бы по типу хаскелевского варианта груп-бай организовать.
Что с людьми делают выходные...
ЗЫ. Получился список из Схемы, вместо КЛ, но уж так и быть.
http://ideone.com/vJcu8x
Но почему мне пришлось на большую часть этого кода писать реализацию стандартной функции groupBy? Аж 5 строк. Почему стандартный groupBy из стандартный библиотеки требует выполнения условия транзитивности для элементов группы? Наверное дофига оптимизаторы.
https://ideone.com/uJl0ix
myaut вот этот питушек память не желеет
> if f==True:
Кстати насколько это адекватно для питона?
Автор:
вполне
Моих знаний питона не хватает, чтобы различить == и is.
print(3==False)
print(3 is True)
print(3 is False)
https://ideone.com/PAEJrD
И что не так?
В 3 теперь нельзя писать True = False
А я и не знаю, что не так, я не питонист, просто прочитал в комментарии про "is", посмотрел, что он на моих примерах не отличается от ==, и теперь мне, как и верхнему гостю, хочется узнать, что хотел сказать автор.
По-крайней мере на втором питоне.
надо заменить на
Довольно жалко, что пришлось реализовывать заново стандартную функцию, кода бы меньше было. Главное об этой особенности стандартной функции нигде не сказано что она не работает адекватно в подобных случаях. Хоть бы требование вписали к предикату.
http://ideone.com/LelJ7Q
Ага, странная она. Сравнивает с первым элементом группы, а не с предыдущим. Об этом стоило бы написать в доке.
Слабые дни... Женский календарь что ли? :)
http://ideone.com/05JzkM
Ну и пары дней выдает как интервал =)
0 - это терминатор. Можно вместо терминатора проверять на конец массива.
{1, 2, 5, 6, 7, 0, 7, 3, 4, 5} >>> "пн - вт, пт - вс, er, вс,"
Так что 0 тут работает не как терминатор, а как еще один элемент.
Это просто функция не выводит последний элемент получившегося списка. :)
Вот так вроде всё правильно работает:
>>> nums = (1,2,3,4,5,6,7)
>>> print reduce(lambda s,r: re.sub(*r,string=s), ((';{2,}',','),(';\w{3};','-'),(';', ',')), ';'.join(('',day)[i in nums] for i,day in enumerate(week,1)))
Mon-Wed-Fri-Sun
Лучше ⓟⓗⒹ.