разбор строк в питоне - PullRequest
       4

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

2 голосов
/ 28 апреля 2011

Я хочу разобрать строку в Python. Пример строки - это четыре числовых значения, разделенных пробелами. Я хочу разобрать и превратить в них значения с плавающей точкой. Код, который я имею в виду ниже. Когда я отлаживаю код. Он никогда не входит в блок else? что за упущенная точка?

def stringToQuaternion(self, str):
        s = ''
        list = []
        for i in range (0, len(str)):
            if ( str[i] != string.whitespace ):
                s += str[i]
            else:
                list.append(float(s))
                s = ''
        return Quadro(list[0], list[1], list[2], list[3])

Ответы [ 3 ]

7 голосов
/ 28 апреля 2011

«Если это сложно, ты делаешь это неправильно». -me

Quadro(*[float(x) for x in S.split()])
2 голосов
/ 28 апреля 2011

Вы сравниваете str[i], который является одним символом, с string.whitespace, который состоит из нескольких символов. Это означает, что str[i] и string.whitespace никогда не могут быть равными.

Вы можете использовать str[i] in string.whitespace или даже лучше str[i].isspace() вместо.

(Как примечание, не называйте переменную str в Python, так как это будет скрывать имя встроенного типа.)

0 голосов
/ 28 апреля 2011

Вы, вероятно, хотите str[i] in string.whitespace вместо !=. Однако такой явный цикл не очень питоничен. Попробуйте этот более идиоматический подход:

def stringToQuaternion(self, s):
    l = [float(w) for w in s.split()]
    return Quadro(l[0], l[1], l[2], l[3])

(Лучше не использовать str и list в качестве имен переменных, поскольку они являются встроенными типами данных.)

Синтаксис func(*l) распаковывает элементы в списке l и передает их в качестве отдельных аргументов функции. Еще проще, если немного более загадочно:

def stringToQuaternion(self, s):
    return Quadro(*[float(w) for w in s.split()])
...