@Shura
Shura
03 Jul 2017

Удивительное дело в питоне - никакой демократии, сплошная диктатура!

for i in range(0,10):
    print i
    i=5

Результат выполнения:

0
1
2
3
4
5
6
7
8
9

Т.е. переменную счётчика цикла нельзя менять! Причём никакой ошибки не выдаётся, полное ощущение, что всё работает, но нет.
После анархии в перле и C это выглядит дико

03 Jul 2017

Это такой тралинк в 2017 или что?

03 Jul 2017

blaze, в циле for нельзя поменять счётчик цикла, потому что он где-то внутри range. Т.е. for не числовой, а итерационный. Это немного непривычно.

#owssz/2 в ответ на /1
03 Jul 2017

Shura,

>>> for i in range(0,10):
...     print i
...     i=5
...     print i
... 
0
5
1
5
2
5
3
5
4
5
5
5
6
5
7
5
8
5
9
5
#owssz/3 в ответ на /2
03 Jul 2017

blaze, цикл не станет бесконечным.
По аналогии на C

for(i=0;i<10;i++)
{
    print(i);
    i=5;
}

получили бесконечный цикл

#owssz/4 в ответ на /3
03 Jul 2017

Shura, тебе нужен while со счётчиком

#owssz/5 в ответ на /4
03 Jul 2017

blaze, да, просто в while это выглядит немного странно. Обычно for предлагает такие услуги. В питоне - нет

#owssz/6 в ответ на /5
03 Jul 2017

blaze, кстати, из-за неимения оператора инкремента в питоне не пройдёт вот такая изящная конструкция

i=0;
while(i++<10)
{
    print(i);
}

Придётся инкременировать i явно, отдельной строкой. Причём следить, чтобы инкремент случился, даже если итерация была прервана где-то на середине командой continue

#owssz/7 в ответ на /5
03 Jul 2017

изящная конструкция
i++<10

you lost me

#owssz/9 в ответ на /7
03 Jul 2017

TWT, а как сейчас модно сравнивать каждый элемент массива с каждым?

#owssz/10 в ответ на /8
03 Jul 2017

TWT, кстати print в питоне норм, мне нравится, разворачивает массивы и структуры. Можно вывести на экран и посмотреть что там такое лежит.

#owssz/12 в ответ на /8
03 Jul 2017

TWT, тут разные массивы. А как сравнивать элемнеты между собой в одном массиве? zip(a,a)? Там можно? Как в этом случае исключать сравнение элемента с самим собой?

#owssz/14 в ответ на /13
03 Jul 2017

TWT, да, я так сейчас и делаю

#owssz/16 в ответ на /15
03 Jul 2017

Советую разобраться, как работает for-цикл, и что возвращает range().

#owssz/17 в ответ на /4
03 Jul 2017

Он ничего не разворачивает, он вызывает .__str__().

#owssz/18 в ответ на /12
03 Jul 2017

postman, я понял, что вызывается какой-то метод объекта вывода, потому что не родные объекты тоже красиво отображаются. Это удобно

#owssz/19 в ответ на /18
03 Jul 2017

TWT, помогла магия itertools.combinations. Это как раз для моего случая

#owssz/20 в ответ на /15
04 Jul 2017

Shura, не вижу никакой дикости. Для меня скорее дикость то что ты счётчику пытаешься какое-то значение присвоить тем самым пытаясь изменить число итераций.

04 Jul 2017

SetazeR, ну и опять же как уже выше обозначили range тебе возвращает итератор на список вида [0,1,2,3,4,5,6,7,8,9] и при каждой итерации просто присваивается следующий элемент из этого списка.

#owssz/22 в ответ на /21
04 Jul 2017

Shura, кстати весьма рекомендую книжку "Изучаем Python" Марка Лутца. http://flibusta.is/b/395068
Очень годная вещь для обучения Питону.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.