【问题标题】:Filter and sort inputed list of integers for non negative numbers python为非负数python过滤和排序输入的整数列表
【发布时间】:2020-09-13 21:38:17
【问题描述】:

我正在尝试获取用户输入的列表,按升序过滤和排序,但仅适用于非负数。我以为我明白如何做到这一点,但它不符合我的逻辑。

my_list = []
n = int(input())
for i in range(0, n):
    element = int(input())
    if element > 0:
        my_list.append(element)
my_list.sort()
print(my_list)

这是我收到的错误: ValueError: int() 以 10 为底的无效文字:'10 -7 4 39 -6 12 2' 它不喜欢第 2 行

【问题讨论】:

  • 我发现有人给我一个负面的反馈是非常无益的。我是这个网站的新手,我正在努力理解 python。有人告诉我这是一个很棒的网站,可以找到有用的提示。我以为我提供了足够的信息并提供了我的代码。所以否定是没有帮助的。
  • 显示输入示例和预期输出
  • 10 -7 4 39 -6 12 2 示例输入和预期输出仅是按升序排序的正数。所以 2 4 10 12 39

标签: python sorting filter


【解决方案1】:

input() 一次返回整个字符串,而不是单个元素,因此您需要使用 str.split 将输入拆分为单个数字,然后将它们转换为整数(这可以使用 map 方便地完成)在仅选择非负数放入my_list 之前(这可以写为列表理解)。然后您可以使用list.sort 对列表进行排序:

elements = map(int, input().split())
my_list = [e for e in elements if e >= 0]
my_list.sort()
print(my_list)

对于10 -7 4 39 -6 12 2 的输入,这会产生

[2, 4, 10, 12, 39]

Demo on ideone

【讨论】:

    【解决方案2】:
    user_input = input()
    
    my_list = [int(i) for i in user_input.split() if (int(i)>=0)] 
    
    my_list.sort()
    
    [print(i, end=' ') for i in my_list]
    

    【讨论】:

      【解决方案3】:
      # this solution works
      user_input = input()
      my_list = [int(i) for i in user_input.split() if (int(i)>=0)] 
      my_list.sort()
      [print(i, end=' ') for i in my_list]
      

      【讨论】:

        【解决方案4】:

        我是新手,但可能有更好的写法。

        interger = input().split()
        
        new_interger = []
        sorted_list = []
        
        for x in interger:
            new_interger.append(int(x))
            for x in new_interger:
                if x >= 0:
                    new_interger.pop()
                    sorted_list.append(x)
        sorted_list.sort()
        
        for x in sorted_list:
            print(x, end=' ')
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案5】:

        我把它分解了一点,以显示输出列表元素而不是实际列表所需的步骤:

        data = input()
        
        #turn input to a list based on spaces
        dat_list = data.split()
        #turn elements in list to integers
        dat_list = [int(x) for x in dat_list]
        #fix list to only include positive integers
        dat_list = [i for i in dat_list if pn >= 0]
        
        #sort list
        dat_list.sort()
        
        #print each integer in list with a space after 
        for i in dat_list:
            print(i, end=' ')
        

        尽量对难以理解的人进行解释,这意味着这不是最短或最有效的方法,但对新手友好

        【讨论】:

          【解决方案6】:

          您必须将数组的长度放入 n 中,然后使用 i 定义元素:

          my_list = []
          n = len(input().split())
          for i in range(0, n):
              element = int(input().split()[i])
              if element > 0:
                  my_list.append(element)
          my_list.sort()
          print(my_list)
          

          打印:

          [2, 4, 10, 12, 39]
          

          编辑:上层版本已经过测试,可与 Py 3.8.2 一起使用

          这也适用于使用 Py 3.7.3 的 https://ideone.com/rDw1w6#stdin

          my_list = []
          my_string_array = input().split()
          n = len(my_string_array)
          for i in range(0, n):
              element = int(my_string_array[i])
              if element > 0:
                  my_list.append(element)
          my_list.sort()
          print(my_list)
          

          【讨论】:

          • 如果 input() 的返回值是一个字符串,你需要先将其拆分,然后再给它 len
          • 感谢您的帮助,但这仍然给我一个错误。特别是元素 = int(input().split()[I])。 EOFError:读取一行时出现EOF
          • 如果您使用的是 sublime 文本:stackoverflow.com/questions/12547683/…
          • 添加一个正在使用 ideone.com/rDw1w6#stdin 的版本,它正在使用 Py 3.7.3。我的第一个版本是在 Py 3.8.2 上测试的
          • 这很有帮助。谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多