【问题标题】:Removing duplicates and sorting list python删除重复项和排序列表python
【发布时间】:2019-01-15 06:51:46
【问题描述】:

给定一个列表,我需要按排序顺序打印数字并删除所有重复项。我正在使用 python 3.7.2

我的代码:

def sorted_elements(numbers):
    return sorted(set(numbers))

testcase = int(input())
while testcase > 0:
   numbers = input().split()
   l = sorted_elements(numbers)

   for x in l:
      print (x, end = ' ')

   print ()
   testcase -= 1

但是,只要我的输入包含 2 位数字,逻辑就会失败。 例如。对于2 1 43 2 5 的输入,我得到1 2 43 5 的输出。

这非常适用于单个数字。有人可以帮我解决这个问题吗?

【问题讨论】:

  • numbers 是一个字符串列表,将其转换为整数,numbers = map(int,input().split())
  • @PatrickArtner 是的,我在粘贴代码时遇到了问题。无论如何,它已被编辑,不应出现 IndentationError。

标签: python python-3.x list


【解决方案1】:

您只需要稍作修改。您正在比较字符串而不是数字,因此请尝试以下操作:

def sorted_elements(numbers):
    return sorted(set(numbers))

testcase = int(input())
while testcase > 0:
   numbers = map(int, input().split())
   l = sorted_elements(numbers)

   for x in l:
      print (x, end = ' ')

   print ()
   testcase -= 1

如果你愿意,你也可以这样做:

numbers = (int(x) for x in input().split())

【讨论】:

  • 这是一个不费吹灰之力的家庭作业问题-我通常避免使用它们-无论如何它们最终都会被删除。 1 班轮:print(' '.join(sorted(set(map(int,input().split())))))
  • @PatrickArtner 确实可以在一行中轻松完成,但我希望对 OP 的代码进行尽可能少的修改。
【解决方案2】:

您可以在各个方面对此进行简化。使用适当的键函数按数值排序,如果您事先知道迭代次数,请使用 for 循环,使用适当的字符串工具,如 str.join 等。

testcases = int(input())

for _ in range(testcases):
    print(' '.join(sorted(set(input().split()), key=int)))

【讨论】:

    【解决方案3】:

    您将使用set(numbers) 以正确的方式删除重复项。问题来自sorted,而您的numbers 是strs 的列表而不是ints。

    试试这个:

    x_numbers = input().split()
    numbers = [int(x) for x in x_numbers]
    

    【讨论】:

    • @PatrickArtner 你没在 OP 的问题中看到 return sorted(set(numbers)) 吗?
    • 我不清楚你让他在他的代码中使用你的numbers,所以我认为答案不完整,因为Removing duplicates and sorting list python 的答案 - 感谢您添加一些上下文。
    【解决方案4】:

    立即尝试:

        testcase = int(input())
        n=list(str(testcase))
        results = map(int, n)
    
        numbers= sorted(set(results))
    
    
        print(numbers)
    

    代码在这里:https://repl.it/repls/SeriousRosybrownApplicationprogrammer

    【讨论】:

      【解决方案5】:

      我们可以像这样保持简单。这是参考

      input=raw_input() #took input as string
      inputlist=input.split() #split the string to list
      lsintegers = map(int, list(set(inputlist))) #remove duplicates converted each element to integer
      lsintegers.sort() #sorted 
      print(lsintegers)`
      

      【讨论】:

        猜你喜欢
        • 2021-02-23
        • 1970-01-01
        • 2011-02-09
        • 2018-01-26
        • 2021-02-25
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多