Для диапазона, включающего кортеж и последний кортеж - PullRequest
0 голосов
/ 18 января 2011

я запускаю для проверки списка кортежей.что-то в строках

for i in range of b:
   actual=i
   temp1=(actual[0]+1,actual[1])
   temp2=(actual[0],actual[1]-1)
   temp3=(actual[0],actual[1]+1)
   temp4=(actual[0]-1,actual[1])

И я хочу убедиться, что темп никогда не будет принимать значение кортежа, проверенного в цикле ранее.Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Вот мои два цента.Обратите внимание, что это сделает temp (1-4) None, если есть совпадение.

# assuming b is a collection
for i in range(len(b)):
    actual=b[i]
    if i!=0:
        prev = b[i-1]
    if i==0:
        prev = [[['something']],[['ridiculous']]] #this is so that the rest of the code works even if index is 0
    if (actual[0]+1,actual[1]) != prev: #if it is not the previous item
        temp1=(actual[0]+1,actual[1]) #assign temp1
    else:
        temp1 = None  #temp1 would otherwise automatically take on the value of (b[i-1][0]+1,b[i-1][1])
    if (actual[0],actual[1]-1) != prev:
        temp2=(actual[0],actual[1]-1)
    else:
        temp2 = None
    if (actual[0],actual[1]+1) != prev:
        temp3=(actual[0],actual[1]+1)
    else:
        temp3 = None
    if (actual[0]-1,actual[1]) != prev:
        temp4=(actual[0]-1,actual[1])
    else:
        temp4 = None
0 голосов
/ 18 января 2011

Во-первых, похоже, проблема в вашем коде. range принимает целочисленный ввод, поэтому, если b является целым числом, for i in range(b) даст вам целые числа [0, 1, 2, .. , b-1 ] в списке. Вы не можете индексировать в i, используя [], как в следующих двух строках.

Если b не целое число, а коллекция, то вы должны использовать что-то вроде:

# Assuming b is a collection
for i in range(len(b)):
   actual=b[i]
   temp1=(actual[0]+1,actual[1])
   temp2=(actual[0],actual[1]-1)
   temp3=(actual[0],actual[1]+1)
   temp4=(actual[0]-1,actual[1])

   # Check if this is the first one.  If it is, previous won't exist.
   if i == 0:
       continue

   previous = b[i-1]
   if previous in [ temp1, temp2, temp3, temp4 ]:
       # This is what you want not to happen.  Deal with it somehow.
       pass
...