Вывод чисел из строк Python 3
Написал программу которая при вводе чисел определяет повторяющиеся и выводит их, но возникла проблема. При вводе двух,трех и т.п. чисел они разбиваются. Пример: Ввод:10 20 30 10 Вывод:1 0 Должно быть:10 Как исправить эту проблему? Код программы:
a = input().split()
a.sort()
d = []
b = 0
c = 1
for i in a[:-1]:
if a[b] == a[c] and a[c] not in d:
d += a[c]
b += 1
c += 1
print(*map(int, d))
Пожалуйста объясните понятно, потому что я только учусь писать на Питоне и мне важен ни ответ а объяснение решения. Заранее спасибо!
Ответы (2 шт):
А так не проще?
a = [10, 20, 30, 10, 20]
unique = set()
repetitive = set()
for num in a:
if num not in unique:
unique.add(num)
else:
repetitive.add(num)
print(*sorted(list(repetitive)))
можно даже чуть покороче:
a = [10, 20, 30, 10, 20]
unique, repetitive = set(), set()
for num in a:
(repetitive if num in unique else unique).add(num)
print(*sorted(list(repetitive)))
Если же у вас на входе строка, тогда
a = list(map(int, text.split()))
т.е.
text = "10 20 30 10 20"
unique, repetitive = set(), set()
for num in map(int, text.split()):
(repetitive if num in unique else unique).add(num)
print(*sorted(list(repetitive)))
В общем проблема в том, что ты не задаешь тип введенных переменных. В строке a = input().split()
ты получаешь список строковых переменных. То есть каждое число имеет тип string.
Поэтому в троке d += a[c], у тебя добавляется не число, а каждый элемент строки отдельно, то есть '1' и '0'. Нужно заменить эту строку, на d.append(a[c])
Для работы с числами, лучше сразу на вводе задать тип явно. a = list(map(int, input().split()))