вопросы по множествам в Python
во время обучения Python наткнулся на не понятную мне сложность.
Задание такое:
Общие числа На вход программе подаются две строки текста, содержащие числа. Напишите программу, которая выводит все числа в порядке возрастания, которые есть как в первой строке, так и во второй.
Формат входных данных На вход программе подаются две строки текста, содержащие числа, отделенные символом пробела.
Формат выходных данных Программа должна вывести множество чисел, встречающихся в обеих строках.
Теперь сам код который я написал:
print(*sorted(set(input().split()) & set(input().split())))
Подробнее:
myset1 = set(input().split())
myset2 = set(input().split())
myset3 = myset1 & myset2 # intersection()
print(sorted(myset3))
входные данные:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
Выводит:
1 10 2 3 4 5 6 7 8 9
Почему, вместо сортированного, 1 2 3 4 5 6 7 8 9 10 выводит такое?
В первый раз пишу сюда, заранее прошу простить за ошибки.
Ответы (4 шт):
Потому что вы храните не числа, а строки. Ваша задача решается так:
myset1 = set(map(int, input().split())) # <---
myset2 = set(map(int, input().split())) # <---
myset3 = myset1 & myset2 # intersection()
print(sorted(myset3))
вы можете отсортировать и строки, просто используйте нужный ключ:
print('out: ', *sorted(set(input('nums_1: ').split()) & set(input('nums_2: ').split()), key=int))
# ^^^^^ ключ
'''
nums_1: 1 2 3 4 5 6 7 8 9 10
nums_2: 10 9 8 7 6 5 4 3 2 1
out: 1 2 3 4 5 6 7 8 9 10
Ещё один однострочник для разнообразия. Не люблю, когда код повторяется, тут без повторения конструкций:
print(*sorted(set.__and__(*(set(map(int, input().split())) for _ in range(2)))))
Можно использовать аргумент key принимающий функцию, применяемую к элементам последовательности для сравнения. В данном случае целесообразно использовать int
myset1 = set(input().split())
myset2 = set(input().split())
myset3 = myset1 & myset2 # intersection()
print(sorted(myset3, key=int))