#python #function #loops #tuples
#python #функция #циклы #кортежи
Вопрос:
У меня есть кортеж списка, как показано ниже.
listt = [('1995', 0.2),
('1996', 0.05),
('1997', 0.029),
('1998', 0.43,
('1999', -0.086),
('2000', 0.050,
('2001', -0.27),
('2002', 0.173),
('2003', 0.289)]
Здесь 1999 и 2001 имеют отрицательные значения. Мне нужно напечатать годы отрицательных значений. Я написал приведенный ниже код, но он не работает.
print(filter(listt, key=lambda x:x[1]<0)[0]))
Комментарии:
1. У вас есть незакрытые кортежи в этом списке.
2. Этот код содержит синтаксические ошибки и вообще не выполняется. Пожалуйста, опубликуйте свой фактический код.
3. В какой документации говорится, что
filter
уkey
нее есть параметр?
Ответ №1:
filter
запускает заданную функцию по всем элементам списка и возвращает только те элементы, для которых функция возвращает True
. так и должно быть:
list(filter(lambda x: x[1]<0, listt))
Вывод:
[('1999', -0.086), ('2001', -0.27)]
Поскольку вы хотите напечатать только соответствующие годы, вы можете перечислить и распечатать их
[y for y, v in filter(lambda x: x[1]<0, listt)]
Вывод:
['1999', '2001']
Или вместо этого сделайте оба сразу:
[y for y, v in listt if v < 0]
Вывод:
['1999', '2001']
Ответ №2:
Есть более простой способ сделать это:
print([k for k, v in listt if v < 0])
Ответ №3:
Попробуйте это :
listt = [('1995', 0.2),
('1996', 0.05),
('1997', 0.029),
('1998', 0.43),
('1999', -0.086),
('2000', 0.050),
('2001', -0.27),
('2002', 0.173),
('2003', 0.289)]
print([x[0] for x in listt if x[1] < 0]) #=>['1999', '2001']