Уведомления

Группа в Telegram: @pythonsu

#1 Май 3, 2013 16:43:45

ppp08217
Зарегистрирован: 2013-05-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строк

Допустим, программе подается n-ое количество строк вида “Число Слово”, например “75 qwerty”. Нужно сохранить число (в типе int) и слово в переменные, проделать с ними какие-то операции и так по циклу.
Дело в том, что мне бы не хотелось сохранять саму строку. То есть вариант

st = input().split()
points, name = int(st[0]), st[1]
отпадает.
Конечно, можно использовать генератор списков
points, name = [int(j) if i == 0 else j for i, j in enumerate(input().split())]
, но выглядит это не очень приятно.
Так вот, есть ли способ поизящнее?

Офлайн

#2 Май 4, 2013 08:45:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Преобразование строк

ppp08217
Дело в том, что мне бы не хотелось сохранять саму строку.
Ваше желание непонятно. Вы не хотите создавать временную переменную?
points,name=[f(v) for f,v in zip([int,str],input().split())]
По моему мнению в питоне не хватает чтения текстовых данных по заданному формату, как например сделано в пакете struct.

например так:
def scanf(itr,fmt):
    """ format chars i,f,s,n
    i - int
    f - float
    c - char
    s - string
    n - string to newline
    """
    fmtdkt=dict(i=int,f=float,s=lambda x:x)
    res=[]
    for ifmt in fmt:
        if ifmt in "ifs":
            for i in itr:
                if not i.isspace():
                    break
            buf=[i]
            for i in itr:
                if i.isspace():
                    break
                else:
                    buf.append(i)
            s="".join(buf)
            res.append(fmtdkt[ifmt](s))
        else:
            buf=[]
            for i in itr:
                if i != '\n':
                    buf.append(i)
                else:
                    break
            res.append("".join(buf))
    return res



Отредактировано doza_and (Май 4, 2013 08:46:38)

Офлайн

#3 Май 4, 2013 09:09:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Преобразование строк

python.org. scanf

>>> import re
>>> 
>>> s = '75 qwerty'
>>> 
>>> m = re.search(r'^(\d+) (\S+)$', s)
>>> n, w = int(m.group(1)), m.group(2)
>>> n, w
(75, 'qwerty')
>>>



Отредактировано py.user.next (Май 4, 2013 09:14:11)

Офлайн

#4 Май 4, 2013 19:20:32

ppp08217
Зарегистрирован: 2013-05-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строк

doza_and
Вы не хотите создавать временную переменную?
Да, именно. И хотелось бы уместить все это в одной строке.
Спасибо за Ваш вариант:
doza_and
points,name=[f(v) for f,v in zip([int,str],input().split())]
Буду пока использовать его.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version