Вопрос по форматированию вывода

Есть функция которая принимает входной список элементов и на выходе сортирует их по типам.

def separate_types(seq):
st = []
intg = []
bo = []
i = 0
while i < (len(seq)):
    if type(seq[i]) == int:
        intg.append(seq[i])
        i += 1
    elif type(seq[i]) == str:
        st.append(seq[i])
        i += 1
    elif type(seq[i]) == bool:
        bo.append(seq[i])
        i += 1
    else:
        i += 1
return f"{{{type(intg[0])}: {intg}, {type(st[0])}: {st}, {type(bo[0])}: {bo}}}"

допустим при seq = ['a', 1, 2, False, 'b'] получаем такой вывод

{<class 'int'>: [1, 2], <class 'str'>: ['a', 'b'], <class 'bool'>: [False]}

Если во входном списке отсутствует один из этих элементов int, str, bool получаю ошибку. Подскажите пожалуйста как правильно организовать проверку и форматирование вывода если один из вышеуказанных типов данных отсутствует на входе. Чтоб его не выводило. Если не решение то хотя бы подскажите в какую сторону копать. Благодарю заранее.


Ответы (1 шт):

Автор решения: Zhihar

как по мне, то вы немного усложнили первую часть и упростили вторую :)

если решать в лоб, то можно так:

def separate_types(seq):
    st = []
    intg = []
    bo = []

    for obj in seq:
        if type(obj) == int:
            intg.append(obj)
        elif type(obj) == str:
            st.append(obj)
        elif type(obj) == bool:
            bo.append(obj)

    res = []
    res.append(f"{type(intg[0])}: {intg}" if intg != [] else "")
    res.append(f"{type(st[0])}: {st}" if st != [] else "")
    res.append(f"{type(bo[0])}: {bo}" if bo != [] else "")

    return ' '.join(res)

print(separate_types(['a', 2, 1, False, 'b']))
print(separate_types(['a', 2, 1, 'b']))

опять же - вы же знаете, что хранится в st и т.д., поэтому вам не надо делать универсальное решение через type, вы сразу можете писать f"str: {st}"

Универсальное решение:

А хотите полностью универсальное решение - посмотрите на такое:

def separate_types(seq):
    data = dict()

    for obj in seq:
        data[type(obj)] = data.get(type(obj), []) + [obj]

        return ' '.join([f"{type(key)}: {value}" for key, value in data.items()])


print(separate_types(['a', 2, 1, False, 'b']))
print(separate_types(['a', 2, 1, 'b']))

может оно вас полностью устроит

→ Ссылка