Форум сайта python.su
Здравствуйте.
В ANSI C есть возможность создавать хитрые циклы вида for(int i=0, int j=30; i<20, j>=5; i++) (пример из головы, особо не вдумывайтесь)
Как на пайтоне реализовать подобные извращения?
Заранее спасибо.
Офлайн
Python принципиально против изращений
Офлайн
Чтобы такое сделать нужно использовать вложеные циклы. В отличие от си, где сразу образуется нагромождение скобок, в питоне это быдет выглядеть довольно акуратно.
А ваша конструкция действительно извращение (: Бесполезное и трудно читаемое.
Офлайн
хорошо. тогда пример из жизни.
#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");
Офлайн
можно конечно добавлять все значения в одномерный список, а потом из одномерного списка другим циклом формировать 2-мерный, но разве это не будет еще большим извращением?
Офлайн
:)
можно так попробовать, если ничего интереснее в голову не приходит:
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
Офлайн
ofigetitelnoчерт возьми, именно так я и сделал, но этот цикл выводит на экран, а не в 2-х мерный список, индексируемый отдельно. :-)
:)
можно так попробовать, если ничего интереснее в голову не приходит: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
Офлайн
т.е. на С нужный мне цикл приобрел бы следующую форму
#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];
}
}
Отредактировано (Ноя. 22, 2010 01:48:41)
Офлайн
:)
примерно так, возможно где-то с индексами что-то перепутал:
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)
Офлайн
во! спасибо, то, чего я так долго ждал. А то в документации не нашёл, что так можно делать.
Офлайн