Удалить элемент из списка, если он содержит только одно слово - PullRequest
0 голосов
/ 29 октября 2019

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

my_list = ['how is it going today?','good','the','It is nice weather outside']

Я думаю, что-то вроде my_list.pop, но это должно быть основано на условии только одного слова. В этом случае мне нужно удалить «good» и «the» из my_list. Есть идеи? ожидаемый результат:

print(my_list)
['how is it going today?','It is nice weather outside']

Ответы [ 4 ]

3 голосов
/ 29 октября 2019

Вы можете использовать понимание списка и тот факт, что если в фразе более одного слова, то должен быть хотя бы один пробел. Следующая строка должна достичь этого:

my_list = [phrase for phrase in my_list if phrase.count(' ') > 0]

Если ваше определение «более одного слова» не соответствует тому, как я его определил (должно содержать хотя бы один пробел), тогда вы можете изменитьоператор if в зависимости от вашей логики.

1 голос
/ 29 октября 2019

Я предпочитаю ответ @ the_martian, но мы также можем попробовать другой подход:

my_list = [phrase for phrase in my_list if ' ' in phrase]
1 голос
/ 29 октября 2019

Проверьте длину списка, полученную в результате разбиения строки, например:

my_list = ['how is it going today?','good','the','It is nice weather outside',' word']
my_list = [x for x in my_list if len(x.strip().split()) > 1]


print(my_list)
# ['how is it going today?', 'It is nice weather outside']

strip() удаляет конечные пробелы, а split()делит строку на разделенные пробелами подстроки. Это не очень эффективно, поскольку создает временную list, чего можно избежать в ряде распространенных сценариев.


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

separators = ' ', '\t', '\n'  # etc.


my_list = ['how is it going today?','good','the','It is nice weather outside',' word']
my_list = [
    x for x in my_list
    if any(separator in x for separator in separators)]


print(my_list)
# ['how is it going today?', 'It is nice weather outside', ' word']

Если вы можете предположить, что разделители - это одиночные символы, эффективный подход, которыйустойчив к трейлингу separators будет:

separators = ' \t\n'  # etc.


my_list = ['how is it going today?','good','the','It is nice weather outside',' word']
my_list = [
    x for x in my_list
    if any(separator in x.strip(separators) for separator in separators)]


print(my_list)
# ['how is it going today?', 'It is nice weather outside']
0 голосов
/ 29 октября 2019
for index, ele in enummerate(my_list):
   words = ele.split(' ')
   if(len(words)==1):
      my_list.pop(index)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...