首页 > 解决方案 > 在python相邻数字问题中列出超出范围的问题

问题描述

我有一个问题要求比较列表中的 2 个数字,特别是相邻数字是正数还是负数但是我被困在问题的第一部分。我的想法是使用其索引将第一个数字与第二个数字进行比较,因此 i+1,但不可避免地会超出范围。

我在这里遗漏了一些东西,不胜感激。

my_list=[-1,2,-3,-4,-5,1,2]
for i in range(len(my_list)):
   print (my_list[i])  
   print (my_list[i+1])

我一直在努力,这是完整的问题

给定一个数字序列,找到并打印第一对具有相同符号的相邻元素。如果没有这样的对,则打印 NONE。

zip在这种情况下我不允许使用。

但是,如果没有配对,我不能做最后一点,它要求 pro print none

s = input()
my_list_str = s.split()
my_list = []

for beta in my_list_str:
  my_list.append(int(beta))

for i in range(len(my_list)-1):
  if my_list[i]>0 and my_list[i+1] >0:
     print (my_list[i], end =' ')
     print (my_list[i+1])
     break
  elif my_list[i]<0 and my_list[i+1] <0:     
      print (my_list[i], end =' ')
      print (my_list[i+1])
      break

标签: pythonlist

解决方案


两点:

  • 大多数情况下,使用索引来迭代列表被认为是“非 Python 的”
  • for-loop 可以选择使用 -condition 关闭:条件中else的代码else仅在for-loop 没有通过break

因此,您可以尝试以下方法:

for first, second in zip(my_list[:-1], my_list[1:]):
    if (first < 0 and second < 0) or (first > 0 and second > 0):
        print(first, second)
        break
else:
    print("NONE")

编辑:如果你需要使用索引,那么你可以这样做:

for i in range(len(my_list) - 1):
    first, second = my_list[i], my_list[i+1]
    if (first < 0 and second < 0) or (first > 0 and second > 0):
        print(first, second)
        break
else:
    print("NONE")

如果您不允许使用 -loop 的else-option for,那么您可以尝试:

found = False
for i in range(len(my_list) - 1):
    first, second = my_list[i], my_list[i+1]
    if (first < 0 and second < 0) or (first > 0 and second > 0):
        print(first, second)
        found = True
        break
if not found:
    print("NONE")

推荐阅读