如何在 python 中删除列表中大于或等于指定数字的数字

How do you remove numbers greater than or equal to a specified number within a list, in python

所以目标是采用整数输入,使用第一个数字来说明列表中实际有多少个整数,最后一个数字是范围(所以在本例中是 100,所以所有大于或等于列表中的 100 应该在打印中删除)

此外,最后的语句中第一个和最后一个数字都应删除

这是我能想出的,但我遇到了两个问题:在前半部分,它删除了除了“3000”之外的所有内容,似乎它只是列表中没有得到的元素删除是因为“140”和“100”都像预期的那样被删除了。

第二个问题在底部的打印语句中,我不完全确定为什么,但是它给出了“IndexError:列表索引超出范围”

用户输入示例:5 50 60 140 3000 75 100

numbers = []
integers = int(input())
while True:
    integers = int(input())
    numbers.append(integers)
    firsti = numbers[0]
    if len(numbers) > firsti + 1:     #if the number of items in list (numbers) > the first list item PLUS ONE
        numbers.remove(numbers[0])    #remove the first item
        lastdigi = numbers[-1]
        for number in numbers:    
            if number >= lastdigi:    #removes all numbers >= last digi
                numbers.remove(number) 
        break                         #and prints the rest
    
listnum = len(numbers)                #this whole section is to try and print the numbers from the list
while listnum >= 0:                                                       #and match the example output
    print (numbers[0], end=',')
    numbers.remove(numbers[0])

print(numbers)
#example output: '50,60,75,'
#my output: '50,60,3000,75,'

您没有使用指定要使用的输入数量的 integers 变量。

firsti 是之后的第一个输入,但您将它用作输入的数量和限制。但是限制应该是5个数字之后的last输入。

您可以使用列表理解删除所有超出限制的数字。

integers = int(input())
numbers = [int(input()) for _ in range(integers)]
limit = int(input())

result = [x for x in numbers if x < limit]
print(result)

这是一个解决方案。 问题是当您使用 remove() 时,列表丢失了部分索引。


numbers=[5, 50 ,60, 140 ,3000 ,75, 100]
#integers = int(input())
while True:
 #   integers = int(input())
  #  numbers.append(integers)
    firsti = numbers[0]
    if len(numbers) > firsti + 1:     #if the number of items in list (numbers) > the first list item PLUS ONE
        numbers.remove(numbers[0])    #remove the first item
        lastdigi = numbers[-1]
        new_list = []
        for number in numbers:
            if number < lastdigi:    #removes all numbers >= last digi
                new_list.append(number) # [HERE] you are loosing the index
        break                         #and prints the rest

# this whole section is to try and print the numbers from the list
for i in new_list:                                                      #and match the example output
    print (i, end=',')

print(new_list)

我做了一些修改。

与 Python 中的大多数谜题一样 -- 列表推导往往会有很大帮助,这里有一个我认为主要符合您设置的规则的示例:

data_in = '5 50 60 140 3000 75 100'

# Try cleaning the user input first, turning it to integers:
try:
    values = [int(x) for x in data_in.split()]
except ValueError:
    print("Only integers expected")

# Check rules set are adhered to:
# in theory could user input could at min be two integers "0 100"
if len(values) < 2:
    raise ValueError('Need to at minimum specify a length and max value')
elif len(values) - 2 != values[0]:
    raise ValueError('First value should be count of expected ints')

# remove first and last entry-- then filter based on last value.
results = [x for x in values[1:-1] if x < values[-1]]

# Pretty the output with commas:
print(",".join([str(x) for x in results]))