使用STDIN输入列表并输出子列表

时间:2019-02-27 12:20:27

标签: python python-3.x stdin

我正在尝试创建一个函数,该函数将使用STDIN从列表中返回一个范围内的数字子列表(从头到尾)。

但是,我遇到了两个问题,由于需要使用整数列表,因此似乎无法解决它们。这是我要实现的代码。

import sys

def algo(list1, xs, xf):
    for x in list1:
      if x>=xs or x<=xf:
      print(x)

list1 = sys.stdin.readline().strip().split(" ")
xs = sys.stdin.readline().strip().split(" ")
xf = sys.stdin.readline().strip().split(" ")

algo(list1, xs, xf)

使用此方法并使用输入1 2 3 40 50 90 100,开始为3,结束为100,我得到

TypeError: '>=' not supported between instances of 'str' and 'list'

如果我将所有标准输入都设为int(),如

list1 = sys.stdin.readline().strip().split(" ")
xs = int(sys.stdin.readline().strip().split(" "))
xf = int(sys.stdin.readline().strip().split(" "))

我仍然得到

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

因此,我无法将列表转换为int。但是我需要在我的应用程序中使用stdin。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我想出了一个简单的例子来帮助您入门。它可能需要一些调整。见下文:

lastValue = -1
for x in list1:
  for y in xs:
    for z in xf:
      if x != lastValue and (x >= y or x <= z):       
        print(x)
        lastValue = x

您的问题是您根本没有遍历列表xsxf。嵌套循环应该可以解决问题,否则您将无法将list1中的每个值与xsxf中的每个值进行比较。

我正在使用lastValue变量以避免打印任何重复项。此示例假定我所有列表都包含整数,您可能需要将xyz强制转换为int才能使用您的代码。