Robię jednego z projektów Pythona zaczynającego w tym subreddit: http://www.reddit.com/r/ BeginnerProjects i do części jednego z zadań muszę usunąć wszystkie liczby całkowite z tej listy, które mają mniej niż dwie cyfry. Nie jestem pewien, gdzie idę źle. Wiem, że mogę zmienić zasięg na liście, ale chcę wykorzystać jak najwięcej umiejętności.

numbers = [x for x in range(1,1001)]

def two_or_more_digits():
    for num in numbers:
        if len(str(num)) < 2:
            numbers.remove(num)
    print (numbers)

Pracuję w Pythonie 3.

Dziękuję Ci.

0
billylevin 16 sierpień 2014, 18:24

2 odpowiedzi

Najlepsza odpowiedź

Zamiast konwertować cyfrę do ciągów i obliczanie jego długości można również użyć prostego podziału:

[i for i in range(1,1001) if i // 10 > 0]

Spowoduje to zwrócenie listy z INTS od 10 do 1000 (włącznie).

1
martin 16 sierpień 2014, 14:39

Zmieniasz tablicę numbers, aresztuje nad nim ... może być rację?

Jeśli chcesz rozwijać swoje umiejętności, prawdopodobnie chcesz wyrazić warunek jako predykat i użyj go w filter lub w rozumieniu listy:

filtered = filter( lambda x: len(str(num)) < 2, numbers )

filtered2 = [x for x in numbers if len(str(x)) < 2]

(lub nawet lepiej: zamiast tego użyj itertools.ifilter)

0
xtofl 16 sierpień 2014, 14:31