2015-06-30 9 views
1

У меня есть случайный файл csv, содержащий случайные числа, разделенные запятой. Я делаю несколько итераций, чтобы фильтровать данные.Python: увеличение индексов массива

if (int(row[0]) + i == int(row[1])) and int(row[1]) + i == int(row[2]) and int(row[2]) + i == int(row[3]) and int(row[3]) + i == int(row[4]): 
    do something 
elif (int(row[0]) + i == int(row[1])) and int(row[1]) + i == int(row[2]) and int(row[2]) + i == int(row[3]): 
    do something 

Операторы If являются намного более. Мой код, очевидно, отлично работает, поскольку в этом нет ничего особенного.

Я просто хочу, чтобы найти способ, чтобы сделать то, что я делаю, без необходимости вводить

if row[0] and row[1] and row[2] and...

говорят, что максимум строки [4], как показано в приведенном выше примере, в основном, я хочу что-то, как рекурсивная функция сделать:

for n in range of 0 to 4 
    if row[n] +i == row[n+1]: 
     do something 
     row[n] == row[n-1] 
      if row[n-1] ... 

Я не совсем уверен, как это сделать , Я надеюсь, что мой вопрос ясен. Я думаю, что это похоже на question in C#.

Часть, которую я действительно не знаю, как это сделать, заключается в том, как избавиться от and, я имею в виду, если бы я должен был писать if... and ...and, тогда я мог бы просто скопировать пасту и сделать то, что делаю, я хочу лучшее решение , если он существует.

Если решение существует, я бы предпочел, чтобы он был рекурсивным, потому что я стараюсь избавиться от циклов в моем коде.

+2

'if all (int (row [n]) + i == int (строка [n + 1]) для n в диапазоне (4)): ...' – khelwood

+2

«Если решение существует, я бы предпочитают, если он рекурсивный, потому что я изо всех сил стараюсь избавиться от циклов в моем коде ». *Зачем*? Рекурсия не является одним из сильных костюмов питона. Обычно вы хотите пойти * другим способом: удалить рекурсию и заменить ее итеративным подходом. – jme

+0

Вы пытаетесь увидеть, имеет ли значение все в определенной строке одно значение? – radicalmatt

ответ

1

Вы можете сравнить с range:

if [int(x) for x in row[0:4]] == range(int(row[0]), int(row[0]) + 4 * i, i): 

Правая рука будет целыми числами в диапазоне от row[0] через row[0] + 3 * i, с шагом i.

Если вы всегда обрабатывать эти строки как целые числа, это может быть проще преобразовать строку в list из int заранее: с

row = [int(x) for x in row] 

Так что вы можете записать условие более просто:

if row[0:4] == range(row[0], row[0] + 4 * i, i): 
+0

'if [int (x) для x в строке [0: 4]] == range (int (строка [0]), int (строка [0]) + 4 * i, i): ' – Lynob

+0

Большое вам спасибо – Lynob

+0

@Lynob thanks , хороший улов. –