Найти - Пользователи
Полная версия: продвинутые циклы
Начало » Python для новичков » продвинутые циклы
1 2
billy_bob
Здравствуйте.
В ANSI C есть возможность создавать хитрые циклы вида for(int i=0, int j=30; i<20, j>=5; i++) (пример из головы, особо не вдумывайтесь)
Как на пайтоне реализовать подобные извращения?
Заранее спасибо.
gkraser
Python принципиально против изращений
uhbif19
Чтобы такое сделать нужно использовать вложеные циклы. В отличие от си, где сразу образуется нагромождение скобок, в питоне это быдет выглядеть довольно акуратно.

А ваша конструкция действительно извращение (: Бесполезное и трудно читаемое.
billy_bob
хорошо. тогда пример из жизни.
#define ROW_COUNT 35   // количество строк
#define COL_COUNT 24 // количество столбцов

for (int j=ROW_COUNT-1;j>=0;j--)
{
for (int i=14;i>=0;i--)
{
printf(formatString,Amplitudes[i][j]);
}
for (int i=COL_COUNT-1;i>14;i--)
{
printf(formatString,Amplitudes[i][j]);
}
printf("\n");
т.е. имеем некоторый массив, и нам в нем нужно особым способом переставить ячейки. причем не просто вывести на экран (как в этом примере), а занести в другой двумерный массив (Занос значения в который идет в обычном порядке, по возрастающей). В С я бы добавил еще по одному счетчику в объявления цикла и не парился, в пайтоне что то до меня совершенно не доходит что с эти можно придумать.
billy_bob
можно конечно добавлять все значения в одномерный список, а потом из одномерного списка другим циклом формировать 2-мерный, но разве это не будет еще большим извращением?
ofigetitelno
:)
можно так попробовать, если ничего интереснее в голову не приходит:
ROW_COUNT = 35
COL_COUNT = 24
for j in xrange(ROW_COUNT-1,-1,-1):
for i in xrange(14,-1,-1):
print i,j
for i in xrange(COL_COUNT-1,-1,-1):
print i, j
billy_bob
ofigetitelno
:)
можно так попробовать, если ничего интереснее в голову не приходит:
ROW_COUNT = 35
COL_COUNT = 24
for j in xrange(ROW_COUNT-1,-1,-1):
for i in xrange(14,-1,-1):
print i,j
for i in xrange(COL_COUNT-1,-1,-1):
print i, j
черт возьми, именно так я и сделал, но этот цикл выводит на экран, а не в 2-х мерный список, индексируемый отдельно. :-)
billy_bob
т.е. на С нужный мне цикл приобрел бы следующую форму
#define ROW_COUNT 35   // количество строк
#define COL_COUNT 24 // количество столбцов

int newArr[COL_COUNT][ROW_COUNT]

for (int j=ROW_COUNT-1, int k=0 ; j>=0, k < ROW_COUNT; j--, k++)
{
for (int i=14, int m=0; i>=0, m < 14 ; i--, m++)
{
newArr[m][k] = Amplitudes[i][j];
}
for (int i=COL_COUNT-1, int m=14; i>14, m < COL_COUNT ;i--, m++)
{
newArr[m][k] = Amplitudes[i][j];
}
}
а на пайтоне?
ofigetitelno
:)
примерно так, возможно где-то с индексами что-то перепутал:
ROW_COUNT = 35
COL_COUNT = 24
newArr = [[None for x in xrange(ROW_COUNT)] for y in xrange(COL_COUNT)]
for j, k in zip(xrange(ROW_COUNT-1,-1,-1), xrange(ROW_COUNT)):
for i, m in zip(xrange(14,-1,-1), xrange(14)):
newArr[m][k] = (i, j)
for i, m in zip(xrange(COL_COUNT-1,13,-1), xrange(14, COL_COUNT)):
newArr[m][k] = (i, j)
billy_bob
во! спасибо, то, чего я так долго ждал. А то в документации не нашёл, что так можно делать.
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