2013-06-11 4 views
4

Я довольно новичок в Python. У меня есть список следующим образом:Удалить определенные символы из списка python

sorted_x = [('pvg-cu2', 50.349189), ('hkg-pccw', 135.14921), ('syd-ipc', 163.441705), ('sjc-inap', 165.722676)] 

Я пытаюсь написать регулярное выражение, которое будет удалить все после «-» и до «», то есть мне нужно тот же список, чтобы выглядеть, как показано ниже:

[('pvg', 50.349189), ('hkg', 135.14921), ('syd', 163.441705), ('sjc', 165.722676)] 

Я написал регулярное выражение следующим образом:

for i in range(len(sorted_x)): 

    title_search = re.search('^\(\'(.*)-(.*)\', (.*)\)$', str(sorted_x[i]), re.IGNORECASE) 
    if title_search: 
     title = title_search.group(1) 
     time = title_search.group(3) 

Но это требует от меня, чтобы создать два новых списков, и я не хочу, чтобы изменить свой первоначальный список. Можете ли вы предложить простой способ, чтобы я мог изменить свой первоначальный список, не создавая новый список?

+1

Вот намек, что вам не нужно иметь дело с после запятой в списке, ваше регулярное выражение нужно иметь дело только с «название» так, чтобы удалить Си2 вам просто нужно иметь дело с этой текстовой строкой. Направляйтесь к документу python для списков/кортежей. –

ответ

8
result = [(a.split('-', 1)[0], b) for a, b in sorted_x] 

Пример:

>>> sorted_x = [('pvg-cu2', 50.349189), ('hkg-pccw', 135.14921), ('syd-ipc', 163.441705), ('sjc-inap', 165.722676)] 
>>> [(a.split('-', 1)[0], b) for a, b in sorted_x] 
[('pvg', 50.349189000000003), ('hkg', 135.14921000000001), ('syd', 163.44170500000001), ('sjc', 165.72267600000001)] 
+0

Отлично работает! Большое спасибо :) –

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