给出一个列表,我需要按排序顺序打印数字并删除所有重复项。我正在使用python 3.7.2
我的代码:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
CHOICES = [()]
self.fields['choice_field'].choices = CHOICES
但是,只要我的输入由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 1 43 2 5
的输出。
这非常适合一位数字。有人可以帮我吗?
答案 0 :(得分: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 :(得分:0)
您将使用set(numbers)
的正确方法删除重复项。问题来自sorted
,而您的numbers
是str
而不是int
的列表。
尝试一下:
x_numbers = input().split()
numbers = [int(x) for x in x_numbers]
答案 2 :(得分:0)
您可以在各个方面进行简化。使用适当的键函数按数值排序,如果事先知道迭代次数,请使用for
循环,并使用str.join
等适当的字符串工具,等等。
testcases = int(input())
for _ in range(testcases):
print(' '.join(sorted(set(input().split()), key=int)))
答案 3 :(得分:0)
我们可以像这样简单。这是参考
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)`
答案 4 :(得分:0)
立即尝试:
testcase = int(input())
n=list(str(testcase))
results = map(int, n)
numbers= sorted(set(results))
print(numbers)
代码在这里:https://repl.it/repls/SeriousRosybrownApplicationprogrammer