#python #arrays #list-comprehension
Вопрос:
Идея этого состоит в том, чтобы получить любое имя из nombres
этого начала с любой буквы, которая задана padron
и сохранить его в nombres_filtrados
(что я не могу понять). Я был бы очень признателен за помощь!
padron = ['A', 'E', 'J', 'T']
nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela', "X"]
nombres_filtrados = [x for x in nombres if any(f in x for f in padron)]
print(nombres_filtrados)
Спасибо!
Комментарии:
1. Этот код не выполняет то, что вы намереваетесь. Он добавит любое слово, в
nombres
котором есть хотя бы один из символовpadron
in .2. Это совпадение, потому что все ваши имена начинаются с заглавных букв. Если бы у вас был, например
"CELESTE"
, в вашемnombres
списке, он тоже был бы выбран. Правильная реализация была бы такой[x for x in nombres if x[0].upper() in padron]
.3. Это работает только потому
padron
, что содержит все заглавные буквы, а единственные символы с заглавными буквами — это первый символ. Не так, как должен быть написан код.4. Из всех имен в этом списке, безусловно, самое крутое
"X"
. Если у меня есть еще один ребенок, я называю их X (и, конечно, со ссылкой на StackOverflow в их свидетельстве о рождении).5. @paddy Убедитесь, что они стали профессором чего-то .
Ответ №1:
nombres_filtrados проверяет каждую букву в каждом имени по вашему списку padron, действительно ли это должно быть:
padron = ['A', 'E', 'J', 'T']
nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela', "X",'eA']
nombres_filtrados = [x for x in nombres if any(f in x[0] for f in padron)]
print(nombres_filtrados)
В основном то, что делает nombres_filtrados, это:
padron = ['A', 'E', 'J', 'T']
nombres = ['Tamara', 'Marcelo', 'Martin', 'Juan', 'Alberto', 'Exequiel',
'Alejandro', 'Leonel', 'Antonio', 'Omar', 'Antonia', 'Amalia',
'Daniela', 'Sofia', 'Celeste', 'Ramon', 'Jorgelina', 'Anabela', "X",'eA']
nombres_filtrados = [x for x in nombres if any(f in x[0] for f in padron)]
output = []
for name in nombres: #For Each Name in Nombres
if name[0] in padron: #if the First Letter is In Padron
output.append(name) #Save To Our Output
print(output)
Ответ №2:
Бесполезно проверять все буквы имен. Эффективным методом было бы сопоставление только первой буквы с набором:
[name for name in nombres
if name[0].upper() in set(padron)]
Вывод:
['Tamara',
'Juan',
'Alberto',
'Exequiel',
'Alejandro',
'Antonio',
'Antonia',
'Amalia',
'Jorgelina',
'Anabela']