Сохранение элементов, начинающихся с ‘S’, из списка l в l2 с помощью Python

#python #list #dictionary

#python #Список #словарь

Вопрос:

Мне нужно сохранить все элементы списка, начинающиеся с ‘S’, из списка l в l2

 l= ['Santa Cruz','Santa fe','Sumbai','Delhi']
l1 = []
l1 = list(map(lambda x : x if x[0] == 'S',l))
print(l1)
 

Приведенное выше привело к синтаксической ошибке.

Я попробовал пробную версию -я

 l= ['Santa Cruz','Santa fe','Sumbai','Delhi']
l1 = []
l1 = list(map(lambda x : x if x[0] == 'S' else '',l))
l1
 

и он возвращает [True, True, True, False]

мой ожидаемый результат [‘Santa Cruz’, ‘Santa fe’,’Sumbai’]

Пробная версия-II

 l= ['Santa Cruz','Santa fe','Sumbai','Delhi']
l1 = []
l1 = list(map(lambda x : x[0] == 'S',l))
print(l1)
 

Trial-II вернул [‘Santa Cruz’, ‘Santa fe’, ‘Sumbai’, «]

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

Ответ №1:

 l= ['Santa Cruz','Santa fe','Sumbai','Delhi']
l1 = [name for name in l if name.startswith("S")]
 

Редактировать

У всех строк есть вызываемый метод startswith . Взятие 0-го элемента строки также сделало бы то же самое.

Для понимания списка то, что происходит в строке l1 = [name for name in l if name.startswith("S")] , в основном совпадает с

 l= ['Santa Cruz','Santa fe','Sumbai','Delhi']
l1 = []

for name in l:
    if name.startswith("S"): # also: if name[0] == "S" would work
        l1.append(name)
 

Но более простой способ записать это

Комментарии:

1. Этот ответ хорош, но вы должны предоставить небольшое объяснение того, как работает понимание списков, а также отметить, что у всех строк есть startswith метод.

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

Ответ №2:

Это должно сработать

  [x for x in l if x[0] == 'S']
 

Ответ №3:

Вы не можете использовать if без else внутри lambda. Если вы хотите обязательно использовать лямбду, вы можете использовать filter вместо map:

 l1=list(filter(lambda x: x[0] == 'S', l))

>>> print(l1)

['Santa Cruz', 'Santa fe', 'Sumbai']
 

Если вы хотите посчитать слова, начинающиеся с буквы «S», используя функцию Map, в соответствии с вашим комментарием, вы можете сделать следующее:

 result=sum(list(map(lambda x : 1 if x[0] == 'S' else 0,l)))

>>> print(result)

3
 

Комментарии:

1. Я знаю, что мы можем использовать filter, но я хочу использовать Map. Используя карту функций, подсчитайте количество слов, которые начинаются с ‘S’ в input_list.

2. Добавлена другая версия с использованием map, пожалуйста, проверьте

Ответ №4:

Использование понимания списка: это означает, что добавьте каждый элемент x в l l1 , если 0-й элемент в x является строкой "S" .

 l1 = [x for x in l if x[0] == 'S']