Python中的列表仅避免第一个否定元素

时间:2018-08-25 18:07:24

标签: python list indexing ignore

我正在尝试比较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

3 个答案:

答案 0 :(得分:2)

您可以使用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)

答案 1 :(得分:1)

如果要从第二个数字开始,则显式从第二个数字开始:

for i in range(1, len(lines)):

或更妙的是,使用更惯用的enumerate

for i, number in enumerate(lines[1:], 1):

答案 2 :(得分:1)

您可以尝试以下方法:

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