2013-04-13 3 views
-2

Мне нужна помощь, выполняющая программу, которая должна получить десять чисел и вернуть мне число отрицательных целых чисел, которые я напечатал. Пример: если я вхожу:Python - Определить отрицательное число в списке

1,2,-3,3,-7,5,4,-1,4,5 

программа должна вернуть мне 3. У меня действительно нет подсказки, поэтому, пожалуйста, дайте мне руку :) PS. Извините за мой плохой английский, надеюсь, вы поймете

+5

Вы еще что-нибудь пробовали? Если да, то что вы пробовали? –

+0

@ D.Shawley Этот вопрос был заблокирован: http://meta.stackexchange.com/a/172760/182887 – jamylak

ответ

32

Прервите свою проблему. Можете ли вы определить способ проверки, является ли число отрицательным?

if number < 0: 
    ... 

Теперь у нас есть много чисел, поэтому мы перебираем их:

for number in numbers: 
    if number < 0: 
     ... 

Так что мы хотим сделать? Посчитай их. Таким образом, мы делаем так:

count = 0 
for number in numbers: 
    if number < 0: 
     count += 1 

Более оптимально, это можно сделать очень легко с помощью generator expression и the sum() built-in:

>>> numbers = [1, 2, -3, 3, -7, 5, 4, -1, 4, 5] 
>>> sum(1 for number in numbers if number < 0) 
3 
2

Или вы могли бы использовать filter к «фильтр» из негативов.

total = len(filter(lambda x: x < 0, my_list))

+1

Использование 'lambda' и' filter() 'вместе медленнее и менее читаемо, чем выражение генератора. –

+0

@Lattyware Ну фильтр '' принимает 'lambda'. Мне просто нравится функциональный подход :). Я согласен с вами на 100%. Я даже +1 ваш ответ. – squiguy

+0

'filter' выполняет функцию - создание ее с использованием' lambda' просто полезно в некоторых случаях. Я просто комментировал, чтобы сказать, что это, как правило, худший способ выполнить эту задачу. –

14
sum(n < 0 for n in nums) 

Это самый вещий способ сделать это.

+0

Я думаю, что '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'более ясно, чем' sum'. – gwg

+2

@gwg Вопрос задает общее количество отрицательных целых чисел. 'any' вернет' True' или 'False', что не является желаемым ответом – jamylak