2017-02-12 13 views
1
v = input("enter the vertices: ") 
v = [x.strip(' ') for x in v.split(',')] 

e = input("enter the edges: ") 
e = [x.strip(' ') for x in e.split(',')] 

edges = set(e) 
print(edges) 

Как говорится в названии, я хочу изменить набор на выход {'a-b', 'c-a', 'b-c'} на {('a','b'),('b','c'),('c','a')}, поэтому проще обращаться к данным как к краям. Как мне это сделать?Изменить набор из {a-b, b-c, c-a} на {(a, b), (b, c), (c, a)}?

+0

Просто используйте 'tuple (x.strip(). Split ('-'))' для ребер. – dnswlt

+3

Пожалуйста, не отрицайте ваши сообщения. После того, как вы разместили вопрос, он принадлежит сообществу Stack Overflow в целом (по лицензии CC-by-SA). Если вы хотите отменить этот пост из своей учетной записи, см. [Каков правильный маршрут для запроса на диссоциацию?] (Http://meta.stackoverflow.com/questions/323395/what-is-the-proper-rout е-к-а-диссоциация-запрос) – tripleee

ответ

0

Для преобразования {'a-b', 'c-a', 'b-c'} в {('a','b'),('b','c'),('c','a')}, вы можете использовать выражение в генератор, чтобы разделить каждую строку элемента в наборе основанный на - как:

>>> input_set = {'a-b','b-c','c-a'} 

#      v `str.split()` returns list. And list are non-hashable. 
#      v type-cast it to tuple in order to use it with `set`. 
>>> output_Set = set(tuple(s.split('-')) for s in input_set) 
>>> output_Set 
{('c', 'a'), ('b', 'c'), ('a', 'b')} 

Однако, вам не нужно, чтобы создать набор строк. Если вы хотите создать желаемый набор на первой итерации, вы можете сделать следующее:

v = set(x.strip().split('-') for x in v.split(',')) 
1

Вы можете просто разобрать края, используя набор понимание и расщепление на '-':

e = input("enter the edges: ") 
e = {tuple(x.strip().split('-')) for x in e.split(',')} 
Смежные вопросы