#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']