Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2017 10:19:18

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

Здравствуйте! Есть у меня список с данными типа 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’
Как можно обойти эту проблему?

Отредактировано Syslik (Июнь 30, 2017 10:20:17)

Офлайн

#2 Июнь 30, 2017 10:26:39

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

Ты в цикле изменяешь список по которому идет цикл и когда цикл доходит до цифр, которые ты добавил, то у них нет метода isdigit. Лучше заведи второй список и скидывай в него числа и строки.

Офлайн

#3 Июнь 30, 2017 10:48:34

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

Это так, но мне в любом случае новый список нужно будет занести в старый, и дальше ещё с ним работать. То есть на выходе должно быть

  [1, 'Маша', 'жопка', 57.....................]

Офлайн

#4 Июнь 30, 2017 10:55:59

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

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)

Офлайн

#5 Июнь 30, 2017 11:06:45

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2788
Репутация: +  185  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

Изменяемое состояние это зло. По этому я бы не рекомендовал менять списки, а в место этого создавал бы новые:

 >>> s = ['1', u'Маша', u'жопка', '57']
>>> s = [ int(x) for x in s if x.isdigit() ]
>>> s
[1, 57]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Июнь 30, 2017 11:40:14

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск цифр в строке isdigit, findall

Спасибо! Через enumerate прошло.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version