Как выбрать из списка списков по условию?
Имеется список:
spisok = [
['январь', 31],
['февраль', 28],
['март', 31],
['апрель', 30],
['май', 31],
['июнь', 30],
['июль', 31],
['август', 31],
['сентябрь', 30],
['октябрь', 31],
['ноябрь', 30],
['декабрь', 31]
]
- Необходимо вывести список, где в месяце 31 день;
- Необходимо вывести список, где название месяца не заканчивается на мягкий знак.
Перебирал разные варианты, например:
def sortSort3(spisok):
i = 0
j = 31
for j in spisok[i]:
if j in spisok[i]:
return(spisok[i][0])
i = + 1
print(sortSort3(spisok))
Но запутался в логике. Как это сделать?
Ответы (3 шт):
Автор решения: Jack_oS
→ Ссылка
my_list = [['январь', 31], ['февраль', 28], ['март', 31], ['апрель', 30], ['май', 31], ['июнь', 30], ['июль', 31], ['август', 31], ['сентябрь', 30], ['октябрь', 31], ['ноябрь', 30], ['декабрь', 31]]
Название не заканчивается мягким знаком:
for m in my_list:
if not m[0].endswith('ь'):
print(m)
['март', 31]
['май', 31]
['август', 31]
Количество дней равно 31:
for m in my_list:
if m[1] == 31:
print(m)
['январь', 31]
['март', 31]
['май', 31]
['июль', 31]
['август', 31]
['октябрь', 31]
['декабрь', 31]
Автор решения: TigerTV.ru
→ Ссылка
Можно через filter:
*res, = filter(lambda x: x[1] == 31, spisok)
print(res)
*res, = filter(lambda x: x[0][-1] != 'ь', spisok)
print(res)
Автор решения: Xander
→ Ссылка
Выше уже привели хороший вариант с filter, но я рекомендую вместо него использовать вариант с list comprehention - он эквивалентен в плане логике, но более pythonic-style
data = [
['январь', 31],
['февраль', 28],
['март', 31],
['апрель', 30],
['май', 31],
['июнь', 30],
['июль', 31],
['август', 31],
['сентябрь', 30],
['октябрь', 31],
['ноябрь', 30],
['декабрь', 31]
]
print([item for item in data if item[1] == 31])
print([item for item in data if not item[0].endswith('ь')])