Python - lista

Pioter_94
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
0

Witam. Mam na ogół prosty problem ale im dłużej patrzę na projekt tym ciężej mi jest go rozwiązać. Mianowicie chodzi o to, żeby program po podaniu liczb do listy wypisać te mniejsze od x liczby.

Kopiuj
numbers = []
amount = int(input('How many numbers do you want to add to the list? '+'\n'))
for number in range(0, amount):
    numbers.insert(number, int(input('Enter the number: '+'\n')))
less_than = int(input('Number less than what I have to write?'+'\n'))
i = 0
while int(i) < amount-1:
    if numbers[i] < less_than:
        continue
    elif numbers[i] >= less_than:
        del numbers[i]
    i = i + 1
print('These numbers are :')
for i in range(len(numbers)):
    print(numbers[i])

Problemem jest to, że wyskakuje bład o złym indeksowaniu, ale nie mogę znaleźć w jaki sposób on zachodzi.

edytowany 1x, ostatnio: Pioter_94
WO
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
  • Postów:25
2

Wydaje mi się , że jeśli już dla pierwszego elementu będzie spełniony If w pętli to pętla będzie nieskończona,bo nie dojdzie do zwiększenia i o jeden, bo continue będzie szło do kolejnej iteracji więc caly czas będzie się porównywalo to samo.
Problem z złym indeksowaniem pewnie wynika z tego , że jak usuwasz elementy poleceniem del, a zwiekszasz index to dochodzi do przypadku ze lista zawiera mniej elementów niż ma wartość iteratora który uzywasz jako index,

Spróbuj może rozwiązać to zadanie używając pętli for, powinno być łatwiej.
Np w taki sposób:

Kopiuj
def number_lower_than_x(x, data):
    return [i for i in data if i < x]


data_ = list(map(int, input('Wprowadz liczy oddzielone przecinkiem:').split(',')))
x_ = int(input('Wprowadz prog:'))
print(number_lower_than_x(x_, data_))

Chociaż nie wiem czy jest on najwydajniejszy.

edytowany 1x, ostatnio: wojtyk
lion137
Dobrze, list comprehension jest wydajne i jest zalecane w Pythonie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.