Найти - Пользователи
Полная версия: Поиск цифр в строке isdigit, findall
Начало » Python для новичков » Поиск цифр в строке isdigit, findall
1
Syslik
Здравствуйте! Есть у меня список с данными типа str
   ['1', 'Маша', 'жопка', '57'.....................]
Мне нужно найти в нём числа, перевести их в int и занести обратно в список (или заменить).
for element in string:
if element.isdigit():
symbol=int(element) # работает
string.remove(element)
string.append(symbol) # уже не работает!!!!!!
На выходе - AttributeError: ‘int’ object has no attribute ‘isdigit’
Как можно обойти эту проблему?
krok64
Ты в цикле изменяешь список по которому идет цикл и когда цикл доходит до цифр, которые ты добавил, то у них нет метода isdigit. Лучше заведи второй список и скидывай в него числа и строки.
Syslik
Это так, но мне в любом случае новый список нужно будет занести в старый, и дальше ещё с ним работать. То есть на выходе должно быть
  [1, 'Маша', 'жопка', 57.....................]
krok64
Syslik
Это так, но мне в любом случае новый список нужно будет занести в старый, и дальше ещё с ним работать. То есть на выходе должно быть
Так заполняй новый список а потом присвой его старому.
 new_string=[]
for element in string:
  if element.isdigit():  
      symbol=int(element)  
      new_string.append(symbol) 
  else:
      new_string.append(element) 
string = new_string      
Или можешь менять элементы прямо на месте:
 for i, element in enumerate(string):
  if element.isdigit():  
      string[i]=int(element)
Rodegast
Изменяемое состояние это зло. По этому я бы не рекомендовал менять списки, а в место этого создавал бы новые:
 >>> s = ['1', u'Маша', u'жопка', '57']
>>> s = [ int(x) for x in s if x.isdigit() ]
>>> s
[1, 57]
Syslik
Спасибо! Через enumerate прошло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB