2013-07-02 6 views
0

Это может быть очень просто для многих из вас, но я не могу найти много на нем. У меня есть идея, но я чувствую, что делаю больше, чем должен. Я пытаюсь прочитать данные из файла в формате (x1, x2) (y1, y2). Моя цель состоит в том, чтобы закодировать вычисление расстояния с использованием значений x1, x2, y1 и y2.Извлечение целых чисел из строки упорядоченных пар в Python?

Вопрос: Как извлечь целые числа из этой строки?

+0

Я не совсем понимаю, о чем вы спрашиваете. Не могли бы вы привести пример входных данных и результатов, которые вы ищете? –

+0

David: Я пытаюсь закодировать формулу расстояния, где я читаю строку из файла, а именно «(5, 42) (20, -32)», и мне нужно вывести результат. Я просто топал о том, как сломать эту строку упорядоченных пар в список целых чисел. –

ответ

3

с регулярными выражениями

>>> import re 
>>> s = "(5, 42) (20, -32)" 
>>> x1, y1, x2, y2 = map(int, re.match(r"\((.*), (.*)\) \((.*), (.*)\)", s).groups()) 
>>> x1, y1 
(5, 42) 
>>> x2, y2 
(20, -32) 

или без регулярных выражений

>>> x1, y1, x2, y2 = (int(x.strip("(),")) for x in s.split()) 
+0

А ... Это больше похоже на это. Благодаря! –

+0

@gnibbler - это возможно ("(),") в PHP? –

+0

@MichaelMikhjian, Python 'str.strip' немного необычен. Я не думаю, что есть такой простой способ сделать это в PHP. Если вы не можете найти вопрос об этом, вы можете попробовать создать его. –

3

Это называется sequence unpacking и может быть сделано как этот

>>> a =(1,2) 
>>> x1,x2=a 
>>> x1 
1 
>>> x2 
2 
>>> b = [[1,2],[2,3]] 
>>> (x1,x2),(y1,y2)=b 
>>> x1 
1 
>>> x2 
2 
>>> y1 
2 
>>> y2 
3 
>>> 
+0

RT: Спасибо, но я забыл упомянуть, что я читаю из файла, так что упорядоченная пара сначала читается как строка. Я пытаюсь разбить строку на целые числа, которые я могу назначить vars. –

+0

@Stephen Paul, ответ gnibbler должен делать то, что вы хотите – rtrwalker

+0

Спасибо за ваш вклад! –

0

Если вы пытаетесь получить значения из некоторых списков и в переменное это один из способов сделать это.

>>> x1, y1, x2, y2 = [1, 2] + [3, 4] 
>>> x1 
1 
>>> x2 
3 
>>> y1 
2 
>>> y2 
4 
>>> 

Кортежи будут демонстрировать одинаковое поведение.

x1, y1, x2, y2 = (1, 2) + (3, 4) 

Вот как читать ввод из файла и разобрать его с помощью регулярного выражения gnibbler в

import re 

with open("myfile.txt", 'r') as file_handle: 

    for line in file_handle: 
     x1, y1, x2, y2 = map(int, re.match(r"\((.*), (.*)\) \((.*), (.*)\)", line).groups()) 
     print x1, y1, x2, y2 
+0

Awesome. У меня есть это сейчас. Спасибо чувак! –

+1

Прохладный, также, если вы решили продолжать использовать SO, не забудьте спросить действительно хорошие вопросы =). – John

+0

Я буду работать над этим! Еще раз спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^