Wpis z mikrobloga

#programowanie #python #podstawypodstawprogramowania #informatyka

Proszę napisać program, w którym znajdzie się lista, wypełniona liczbami z losowymi z przedziału 0 do 10000, i który >wyświetli liczbę liczb trzycyfrowych w liście. Lista ta powinna być generowana w funkcji. Jej rozmiar powinien wynosić 100.

wszystko jasne, ale jak zrobić to liczenie liczb 3 cyfrowych? Ktoś ma jakiś pomysł?
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 2
przejdz po liscie i daj warunek:

int getnumberof3digits(array list10k) {
int number =0
for(int i=0, i<10000; i++) {
if(list10k[i]
  • Odpowiedz
@daczka92: Po pierwsze, gdzie Ty tam chcesz wcisnąć regex? Po drugie, konwersja do stringa i sprawdzanie długości jest wolniejsze (nie żeby sam Python był demonem prędkości, ale nie uczmy złych nawyków).
  • Odpowiedz
@grucha_88:

import random
from collections import Counter
rlist = random.sample(range(10000), 100)
counters = Counter(map(lambda x: len(str(x)), rlist))
print(counters.get(3, 0))
  • Odpowiedz
W sumie tutaj nie ma potrzeby skorzystania w funkcji map. wystarczy list comprehension

counters = Counter([len(str(number)) for number in rlist])
  • Odpowiedz
@Budek24: W zasadzie to nie wiem czy istnieje w ogóle przypadek gdzie nie da się użyć list comprehension zamiast map. Jakiś pomysł? :)

Btw. rozwiązanie dosyć czytelne i generalnie fajnie jest korzystać z biblioteki standardowej, ale:

- len(str(x)) - patrz odpowiedź wyżej,
- counters alokuje Ci pamięć na ilość liczebność KAŻDEJ długości liczb, baaaardzo nieładna praktyka bo w ogóle tego
  • Odpowiedz
@Budek24: W praktyce masz racje ("premature optimization is the root of all evil" + współczne maszyny naprawdę dużo zniosą + idea wytwarzania kodu już nie jest ta sama co 20 lat temu), jednak mam mieszane uczucia co do takich stwierdzeń gdy ktoś uczy się programowania.Choć możesz mieć rację, bo przynajmniej nie nauczy się niepotrzebnie optymalizować. Who knows. ;)
  • Odpowiedz