Использование регулярного выражения для заданного c элемента вложенного списка кортежей - PullRequest
1 голос
/ 05 февраля 2020

У меня есть вложенный список кортежей:

ntl = [('h', '2019-11-12', 'l'), 
       ('h', '2019-11-11', 'm'),
      ]

Как видно, запись с индексом 1 в каждом кортеже является датой. Я хочу удалить дефисы между числами. Вот так:

date = [('h', '20191112', 'l'), 
       ('h', '20191111', 'm'),
       ]

Я пробовал что-то вроде этого:

date = [re.sub(r'-', '', i[1]) for i in ntp]

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

Может кто-нибудь помощь?

Ответы [ 5 ]

3 голосов
/ 05 февраля 2020

Вам это нравится?

date = [(i[0], re.sub(r'-', '', i[1]), i[2]) for i in ntp]
>>> [('h', '20191112', 'l'), ('h', '20191111', 'm')]
2 голосов
/ 05 февраля 2020

Распаковка выполняется иначе

[(i, re.sub(r'-', '', j), k) for i,j,k in ntl]

[('h', '20191112', 'l'), ('h', '20191111', 'm')]

1 голос
/ 05 февраля 2020

Вы можете использовать метод строки replace вместо re.sub:

date = [(a, d.replace("-", ""), c) for a, d, c in ntl]
1 голос
/ 05 февраля 2020

Вместо использования re.sub вы можете разделить строку даты и снова присоединиться:

date = [(a, ''.join(b.split('-')), c) for a, b, c in ntl]
1 голос
/ 05 февраля 2020

Вам просто нужно составить список кортежей более явно:

date = [ (i[0], re.sub(r'-', '', i[1], i[2]) for i in ntp] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...