Я пытаюсь сравнить числа из файла numbers.txt. Меня беспокоит свойство отрицательного индекса в Python, где отрицательное число фактически означает чтение справа налево.
Есть ли способ игнорировать только первое сравнение? Когда я выводю, что предыдущего номера нет (см. Желаемый вывод)
Важно то, что я не могу изменить файл numbers.txt. Они автоматически генерируются из другой функции.
$ cat numbers.txt
1
2
3
4
5
код:
with open('numbers.txt') as file:
lines = file.read().splitlines()
print lines
for i in range(len(lines)):
previous_number = lines[i-1]
current_number = lines[i]
print "current Nr: ", current_number
print "previous Nr: ", previous_number
if current_number > previous_number:
print " current Nr is larger"
else:
print "current Nr is smaller"
выход:
['1', '2', '3', '4', '5']
current Nr: 1
previous Nr: 5
current Nr is smaller
current Nr: 2
previous Nr: 1
current Nr is larger
current Nr: 3
previous Nr: 2
current Nr is larger
current Nr: 4
previous Nr: 3
current Nr is larger
current Nr: 5
previous Nr: 4
current Nr is larger
желаемый выход
['1', '2', '3', '4', '5']
current Nr: 1
previous Nr: There is no previous!
current Nr is none
current Nr: 2
previous Nr: 1
current Nr is larger
current Nr: 3
previous Nr: 2
current Nr is larger
current Nr: 4
previous Nr: 3
current Nr is larger
current Nr: 5
previous Nr: 4
current Nr is larger
Вы можете использовать enumerate
для проверки по индексу
for i, value in enumerate(lines):
previous_number = "None"
CurrentNrText = "None"
if i != 0:
previous_number = lines[i-1]
if current_number > previous_number:
CurrentNrText = " current Nr is larger"
else:
CurrentNrText = "current Nr is smaller"
current_number = lines[i]
print("current Nr: ", current_number)
print("previous Nr: ", previous_number)
print(CurrentNrText)
Вы можете попробовать этот метод:
with open('numbers.txt') as file:
numbers=[None,]
for line in file:
numbers.append(line)
for idx,no in enumerate(numbers,1):
try:
if numbers[idx]>numbers[idx-1]:
print('Current no is {}'.format(numbers[idx]))
print('Previous no is {}'.format(numbers[idx-1]))
print ("current Nr is larger")
else:
print ("current Nr is smaller")
except TypeError:
print('Current no is {}'.format(numbers[idx]))
print('There is no previous!')
except IndexError:
pass
выход:
Current no is 1
There is no previous!
Current no is 2
Previous no is 1
current Nr is larger
Current no is 3
Previous no is 2
current Nr is larger
Current no is 4
Previous no is 3
current Nr is larger
Current no is 5
Previous no is 4
current Nr is larger
Если вы хотите начать со второго номера, то явно начинайте со второго номера:
for i in range(1, len(lines)):
Или, еще лучше, используйте более идиоматических enumerate
:
for i, number in enumerate(lines[1:], 1):
i == 0
вашему текущему коду. Я не вижу, где проблема