У меня есть список таких предложений:
['Business World - user unable to log in', 'Cannot Login', 'customer getting no signal message on projector', 'Account - colleague is unable to access account', 'Password reset after interruption']
около 8000 элементов.
Я хочу преобразовать приведенный выше список в lowercase
. Я попытался использовать следующую строку:
my_list = [x.lower() for x in my_list]
Но это дает ошибку:
AttributeError: 'int' object has no attribute 'lower'
Поэтому я сделал следующее, чтобы все элементы считались строками:
my_list = [x.lower() for x in str(my_list)]
Это возвращает нижний регистр, но разбивает каждое слово на отдельные символы?
['[',
"'",
'b',
'u',
's',
'i',
'n',
'e',
's',
's',
' ',
'w',
'o',
'r',
'l',
'd',
' ',
'-',
Что я делаю не так?
Какой делать вы хотите сделать с числами в вашем списке ввода?
У вас нет списка предложений. У вас есть смешанный список строк и целых чисел.
Тот факт, что вы думаете, что у вас есть список предложений, но оказывается, что некоторые элементы являются int
s, должен заставить вас задуматься. Откуда взялся этот список предложений и как в нем оказались int
?
Я попробовал код, который вы разместили в вопросе, в REPL python 3.7.2, и, похоже, он работает так, как вы хотели. Я думаю, что ваш список ввода может содержать целые числа в некоторых местах, а не предложения.
Принятый ответ дал ожидаемый результат. Это был мой искренний вопрос, и я показал свой метод и то, что я уже пробовал. Не знаю, почему SO так суров с такими вопросами и отрицательными отзывами. Я не буду удалять этот вопрос и оставлю его, так как это может помочь кому-то еще.
str(my_list)
сериализует ваш объект списка в один строковый объект. Итерация по строке дает каждый символ в этой сериализации.
Что вы, вероятно, хотите, так это преобразовать каждый элемент в строку (очевидно, в ней также есть числа за пределами вашего образца) и сделать это строчными буквами.
lower_list = [str(x).lower() for x in my_list]
@StuckInPhDNoMore, так что тот факт, что у вас есть целые числа в списке, который, как вы ожидали, будет иметь строки, это круто? Вы кодируете проблему, которую должны исправить выше по течению, если используете это решение.
@timgeb Список был экспортом столбца pandas длиной 8000. Это был импорт csv, и возможно, там могут быть какие-то целые числа. Моя реализация str()
в моем прикладном методе показала, что меня не очень заботит его смешивание. я просто неправильно применил
Причина в том, что где-то в вашем списке есть целые числа, поэтому вам нужно их преобразовать в строки.
Попробуй это:
my_list = [str(x).lower() for x in my_list]
Вам не нужен
str(my_list)
, это сериализует его в строку, а затем ваш цикл перебирает каждый символ этой сериализации, а не каждый элемент в списке. То, что вы хотите, это[str(x).lower() for x in my_list]