Замените значения в списке, если они начинаются с определенных символов, используя списки - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть следующий список, и я пытаюсь заменить любое значение, которое начинается с 23: на 00:00:00.00

tc = ['00:00:00.360',
      '00:00:00.920',
      '00:00:00.060',
      '00:00:02.600',
      '23:59:55.680',
      '00:00:05.960',
      '00:00:01.040',
      '00:00:01.140',
      '00:00:01.060',
      '00:00:01.480',
      '00:00:00.140',
      '00:00:00.280',
      '23:59:59.800',
      '00:00:01.200',
      '00:00:00.400',
      '23:59:59.940',
      '00:00:01.220',
      '00:00:00.380']

Я могу получить то, что мне нужно, используя регулярное выражение,

tc = [re.sub(r'(\b23:)(.*)',r'00:00:00.00', item) for item in tc]

и это дает мне ожидаемый результат, как показано ниже,

['00:00:00.360',
 '00:00:00.920',
 '00:00:00.060',
 '00:00:02.600',
 '00:00:00.00',
 '00:00:05.960',
 '00:00:01.040',
 '00:00:01.140',
 '00:00:01.060',
 '00:00:01.480',
 '00:00:00.140',
 '00:00:00.280',
 '00:00:00.00',
 '00:00:01.200',
 '00:00:00.400',
 '00:00:00.00',
 '00:00:01.220',
 '00:00:00.380']

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

tc = [item.replace(item, '00:00:00.00') for item in tc if item.startswith('23:')]

Результат:

['00:00:00.00', '00:00:00.00', '00:00:00.00']

Результирующий список содержит только замененные элементы, а не весь список. Как использовать вышеуказанный метод, чтобы получить полный список?

1 Ответ

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

Вы должны включить оператор else в троичный оператор:

>>> [item.replace(item, '00:00:00.00') if item.startswith('23:') else item for item in tc]
['00:00:00.360',
 '00:00:00.920',
 '00:00:00.060',
 '00:00:02.600',
 '00:00:00.00',
 '00:00:05.960',
 '00:00:01.040',
 '00:00:01.140',
 '00:00:01.060',
 '00:00:01.480',
 '00:00:00.140',
 '00:00:00.280',
 '00:00:00.00',
 '00:00:01.200',
 '00:00:00.400',
 '00:00:00.00',
 '00:00:01.220',
 '00:00:00.380']

Или даже просто:

>>> ['00:00:00.00' if item.startswith('23:') else item for item in tc]
['00:00:00.360',
 '00:00:00.920',
 '00:00:00.060',
 '00:00:02.600',
 '00:00:00.00',
 '00:00:05.960',
 '00:00:01.040',
 '00:00:01.140',
 '00:00:01.060',
 '00:00:01.480',
 '00:00:00.140',
 '00:00:00.280',
 '00:00:00.00',
 '00:00:01.200',
 '00:00:00.400',
 '00:00:00.00',
 '00:00:01.220',
 '00:00:00.380']
...