3 ms·
Another neat trick with slices is that you can do a partial update on a list. a = range(6) a[::2] = range(10,13) -> generates a with [10,1,11,3,12,5] I saw a
by marcus 18y ago
Another neat trick with slices is that you can do a partial update on a list.
a = range(6) a[::2] = range(10,13) -> generates a with [10,1,11,3,12,5]
I saw a very elegant implementation of Eratosthenes sieve based on that trick
- d0mine 18y agohttp://www.rosettacode.org/wiki/Sieve_of_Eratosthenes#Using_numpy http://www.rosettacode.org/wiki/Sieve_of_Eratosthenes#Using_... from numpy import bool_, nonzero, ones def primes_upto(limit): is_prime = ones(limit, dtype=bool_) for n in xrange(2, int(limit**0.5) + 1): if is_prime[n]: is_prime[n*n::n] = 0 return nonzero(is_prime)[0][2:]
- diN0bot 18y agothis starts to become as cryptic as the previously mentioned 'cryptic regex.' cryptic is anything that can stay in the head 'ram' of a normal programmer. stuff that typically needs to be written down to make sense. i went through the above code with pencil and paper and it made sense. now i can look at the code and it makes sense. the person who originally wrote the code had to go through those steps too (not necessarily on paper, but loading the process into head ram). same with regex. no big deal. i know about slices, and if i didn't that's what mentors are for---oh, that symbol? search for python slices! or a python book. at least python doesn't has less than a handful nonsearchable crypticness. the comment linking to the eratosthenes sieving explanation was helpful.
- d0mine 18y agoSieve of Eratosthenes is actually a straightforward algorithm based on the definition of prime numbers: 1. Mark all integers that greater than 1 as primes. 2. Take the smallest prime that is not already considered and cross out all its multiples. 3. Repeat 2nd step for the next prime. The above Python code that returns all primes number less than a given limit uses two optimization: 1. Repeat 2nd step upto sqrt(limit), not upto limit. 2. Start crossing out at the square of the prime, not at twice of the prime. The only “intuitive” interface is the nipple. After that, it’s all learned. http://news.ycombinator.com/item?id=409288 http://news.ycombinator.com/item?id=409288 (It might be not true literally but the quote is useful as a general idea that people have different backgrounds; an “intuitive” thing for one person is a cryptic for another. Intuitiveness changes with experience.)
- Harkins 18y agoAs this thread mentions cryptic code, Perl, regexps, and primes, I'm compelled to paste the cryptic Perl regexp to determine primes: /^1?$|^(11+?)\1+$/
- d0mine 18y agoIt is not cryptic it is just wrong. '1' is not a prime number. See my answer http://news.ycombinator.com/item?id=479514 http://news.ycombinator.com/item?id=479514