Поиск отрицательных значений в кортеже списка в Python

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