У меня есть кортеж списка, как показано ниже.
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]))
Этот код имеет синтаксические ошибки и вообще не работает. Пожалуйста, опубликуйте свой реальный код.
Какая документация говорит, что filter
имеет параметр key
?
Есть более простой способ сделать это:
print([k for k, v in listt if v < 0])
Попробуй это :
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']
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']
У вас есть незакрытые кортежи в этом списке.