Преобразование списка строк в нижний регистр разбивает слова на символы

У меня есть список таких предложений: ['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',
 ' ',
 '-',

Что я делаю не так?

Вам не нужен str(my_list), это сериализует его в строку, а затем ваш цикл перебирает каждый символ этой сериализации, а не каждый элемент в списке. То, что вы хотите, это [str(x).lower() for x in my_list]

Talon 18.03.2022 16:21

Какой делать вы хотите сделать с числами в вашем списке ввода?

jonrsharpe 18.03.2022 16:22

У вас нет списка предложений. У вас есть смешанный список строк и целых чисел.

timgeb 18.03.2022 16:23

Тот факт, что вы думаете, что у вас есть список предложений, но оказывается, что некоторые элементы являются ints, должен заставить вас задуматься. Откуда взялся этот список предложений и как в нем оказались int?

Samwise 18.03.2022 16:24

Я попробовал код, который вы разместили в вопросе, в REPL python 3.7.2, и, похоже, он работает так, как вы хотели. Я думаю, что ваш список ввода может содержать целые числа в некоторых местах, а не предложения.

Rob Streeting 18.03.2022 16:24

Принятый ответ дал ожидаемый результат. Это был мой искренний вопрос, и я показал свой метод и то, что я уже пробовал. Не знаю, почему SO так суров с такими вопросами и отрицательными отзывами. Я не буду удалять этот вопрос и оставлю его, так как это может помочь кому-то еще.

StuckInPhDNoMore 18.03.2022 16:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
6
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

str(my_list) сериализует ваш объект списка в один строковый объект. Итерация по строке дает каждый символ в этой сериализации.

Что вы, вероятно, хотите, так это преобразовать каждый элемент в строку (очевидно, в ней также есть числа за пределами вашего образца) и сделать это строчными буквами.

lower_list = [str(x).lower() for x in my_list]

@StuckInPhDNoMore, так что тот факт, что у вас есть целые числа в списке, который, как вы ожидали, будет иметь строки, это круто? Вы кодируете проблему, которую должны исправить выше по течению, если используете это решение.

timgeb 18.03.2022 16:56

@timgeb Список был экспортом столбца pandas длиной 8000. Это был импорт csv, и возможно, там могут быть какие-то целые числа. Моя реализация str() в моем прикладном методе показала, что меня не очень заботит его смешивание. я просто неправильно применил

StuckInPhDNoMore 18.03.2022 16:59

Причина в том, что где-то в вашем списке есть целые числа, поэтому вам нужно их преобразовать в строки.

Попробуй это:

my_list = [str(x).lower() for x in my_list]

Другие вопросы по теме