Как проверить определенные числа в списке, а затем посчитать определенные элементы до этого числа?

#python

#python

Вопрос:

У меня есть задача создать программу, которая генерирует список со случайными 50 числами от -10 до 10. Затем мне нужно найти первое отрицательное число и посчитать все элементы, которые от 1 до 5 перед этим числом.

Например, для [2, 6, -1] результата должно быть. 1

Мне нужно использовать *args в этой задаче.

Я выполнил почти весь код, но я не знаю, как вернуться назад от этого первого отрицательного числа и начать подсчет.

 import random

def check(arr, val):  #creating function which is checking numbers      
    for x in arr:
      if val>= x: 
        return True 
    return False

def function(*args):
  val = 0
  if(check(arr, val)): 
    count = arr.count(1)
    count1 = arr.count(2)
    count2 = arr.count(3)
    count3 = arr.count(4)
    count4 = arr.count(5)
    print(count   count1   count2   count3   count4)
  else: # how to start counting back from here?
    return print('No negative numbers')


def generate(x):
    array = []
for i in range(0, 50):
    array.append(random.randint(-10, 10))
return array

arr = generate(60)

print(arr)

function(*arr)
  

Комментарии:

1. Вместо того, чтобы сначала находить первое отрицательное число, а затем начинать подсчет, вы можете начать подсчет с самого начала, пока не найдете отрицательное число.

2. @mkrieger1 Хорошо, я понимаю, что мне нужно использовать цикл, который проходит через и подсчитывает числа и прерывается при обнаружении отрицательного. Но какую функцию в Python я могу использовать для проверки всех элементов, если они отрицательные и находятся в диапазоне от 1 до 5

3. Для этого вам не нужна функция. Чтобы проверить, является ли число x отрицательным, используйте x < 0 , и чтобы проверить, находится ли оно между 1 и 5, используйте 1 <= x <= 5 .

Ответ №1:

 import random

def function(arr):
    counter = 0
    for el in arr:
        if el >= 0:
            counter  = 1
        else:
            break
    return counter


def generate():
    array = []
    for i in range(50):
        array.append(random.randint(-10, 10))
    return array

my_arr = generate()

print(my_arr)

print(function(my_arr))
  

Ответ №2:

Другие ответы, вероятно, более полезны для вас. Вот более функциональный подход.

Сначала я использую понимание списка, чтобы составить список из 50 случайных чисел. Затем я выбираю только положительные числа до, но не включая первое отрицательное число. Я преобразую каждое число между 1 5 to True и любым другим числом to False . Наконец, я подсчитываю, сколько чисел находится между 1 и 5 , и распечатываю его на консоль.

 from random import randint
from itertools import takewhile

numbers = [randint(-10, 10) for _ in range(50)]

print(sum(# accumluate the result and print
    map(# only count numbers that are between 1 and 5 inclusive
        lambda n: n in range(1, 6),
        takewhile( # get all numbers up to but not including negative numbers
            lambda n: n >= 0,
            numbers))))
  

Ответ №3:

 from random import randint

#make a list of random numbers (integers)
numbers = [ randint(-10, 10) for i in range( 50 )]

#collect the only the negative number (ri) and their position (i)
negative_numbers = [ (i, ri) for i, ri in enumerate( numbers ) if ri < 0 ]
print( numbers )

#check to ensure there are negative numbers
if negative_numbers:
    #since i is the first position of that a negative occurs, 
    # count the numbers in the list between 1 and 5
    i, ri = negative_numbers[0] 
    
    n_preceding = len( [ri for ri in numbers[0:i] if ri >= 1 and ri <= 5 ] )
    
    print( f"first random number: {ri}" )
    print( f"numbers preceding: {n_preceding}")
else:
    print( f"no negative numbers were produced" )
  

Приведенный выше код использует итерации списка, что, на мой взгляд, является очень интересной особенностью python.

 numlist = [ i for i in range( 10 ) ]
#output: [ 0, 1, 2, 3, 4, 5.....]

strlist = [ si for si in "HELLO WORLD" ]
#output: [ "H", "E", "L", "L", "O".....]

filtered_list = [ si for si in "HELLO WORLD" if not si == "L" ]
#output = [ "H", "E", "O", " ", "W", "O", "R", "D" ]

#the for loop equivalent of the last
filtered_list = []
for si in "HELLO WORLD":
    if not si == "L":
        filtered_list.append( si )