Редактирование элементов в списке в python

Как удалить символ из элемента в списке?

пример:

mylist = ['12:01', '12:02']

Я хочу удалить двоеточие из меток времени в файле, поэтому я могу более легко преобразовать их в 24hour время. Прямо сейчас я пытаюсь перебрать элементы в списке и найти тот, который содержит двоеточие и делает замену.

for num in mylist:
    re.sub(':', '', num)

но это, похоже, не работает.

помогите!

6 ответов


решение постижение список является наиболее подходящие для Python, но, есть очень важный поворот:

mylist[:] = [s.replace(':', '') for s in mylist]

если вы назначить mylist, barename, как и в другом ответе, а не в mylist[:], "срез всего списка", как я рекомендую, вы действительно делаете что-то совсем другое, чем " замена записей в списке": вы создаете новый список и просто восстанавливаете barename, который вы ранее использовали для ссылки на старый список.

если что на старый список ссылаются несколько имен (включая записи в контейнерах), эта привязка не влияет ни на одно из них: например, если у вас есть функция, которая принимает mylist в качестве аргумента назначение barename имеет какой-либо эффект только локально для функции и не изменяет то, что вызывающий видит как содержимое списка.

присвоение фрагменту всего списка,mylist[:] = ..., изменяет объект list вместо того, чтобы возиться с переключением Привязок barenames -- теперь этот список действительно изменен, и независимо от того, как он упоминается, новое значение-это то, что видно. Например, если у вас есть функция, которая принимает mylist в качестве аргумента назначение среза всего списка изменяет то, что вызывающий объект видит как содержимое списка.

главное-точно знать, какой эффект вы хотите - чаще всего вы захотите изменить объект списка, поэтому, если нужно угадать, назначение среза всего списка обычно является лучшим предположением; -). Производительность-мудрый, это в любом случае это не имеет значения (за исключением того, что назначение barename, если оно сохраняет как старые, так и новые объекты списка, займет больше памяти для любого промежутка времени, когда оба объекта все еще вокруг, конечно).


использовать понимание создать новый список:

>>> mylist = ['12:01', '12:02']
>>> mylist = [s.replace(':', '') for s in mylist]
>>> print mylist
['1201', '1202']

причина, по которой ваше решение не работает, заключается в том, что re.sub возвращает новая string -- strings неизменяемы в Python, поэтому re.sub невозможно изменить существующие строки.


for i, num in enumerate(mylist):
    mylist[i] = num.replace(':','')

вы должны вставить возврат re.саб снова в списке. Ниже приведен новый список. Но вы можете сделать это и для mylist.

mylist = ['12:01', '12:02']
tolist = []
for num in mylist:
  a = re.sub(':', '', num)
  tolist.append(a)

print tolist

строки в python неизменяемы, то есть никакая функция не может изменить содержимое существующей строки, только предоставить новую строку. Вот!--1-->почему.

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


вместо понимания списка, вы также можете использовать map звоните:

mylist = ['12:01', '12:02']
map(lambda f: f.replace(':', ''), mylist) 

возвращает:

['1201', '1202']