Python has similar concept to C# IEnumerable/IEnumerator + some RX
Comprehension--[expr(i) for i in iterable] words="words make a sentence."
words.split() {[len(w) for w in words]} {factorial(x) for x in range(10)}
d={k:v} d_flip={v:k for k:v in d.items()} from math import factorial
from pprint import pprint as p p(d_flip) [w[0]:x for w in words]
{os.path.readpath(p):os.stat(p).st_size for p in glob.glob("*.py")
sum(x for x in range(1,step=1,stop_exclusive=100) if is_prime(x))
itr=itr(itra) itm =next(itr) def first(itra): return next(itr(itra))
except StopIteration return None is null first(set()) empty set None
def first(itra): try: return next(iter(itra)) return None
from math import sqrt
def is_prime(x):
if x<2:
return False
for i in range(2,int(sqrt(x))+2):
if x%i==0:
return False
return True
from itertools import islice, count
p1000=[x for x in range(1,1000) if is_prime(x)]
i=list(islice(p1000,5,10)) # islice=skip+take
count() infinite lazy squence, carefuly with memory overrun by [
slice_inf= islice((x for x in count() if is_prime(x)),1000) # (tuple is fine
from pprint import pprint as pp does not help need list to convert
print(list(slice_inf)) print(sum(slice_inf)) #fast efficient
print(any(is_prime(x) for x in range(4495,4500)))
print(all( n==n.title() for n in ["London","Boston Ma"])) # ma=false
from itertools import chain
s1=[1,2,3,4] s2=[5,6,7,8] print(list(zip(s1,s2,s1)))
print(list(chain(s1,s2,s1))) print(list([ max(x) for x in zip(s1,s2,s1)]))
Fibonacci in Python -- lazy yield does not cost memory
def f(x):
yield 1
t1=1
t2=1
while t1<x:
yield t1
t1,t2=t1+t2,t1
Generator = Lazy comprehension Iterable
g=(x for x in range(1000)) #must use () not [] as tuple RO efficient
l=list(g) realization cost 45M Ram list(g) is single use list(g) empty after
sum( x for x in ...) low memory cost re-run l=list(g) is not emoty cost Ram
statefull generator -- counter or seen=set() in memory durin iteration.
def take(n,itra) counter=0 for .. if(counter==n) return counter++ yield itm
def distinct(itra) seen=set() for .. if i in seen: continue yield itm seen.add(itm)
pipeline for i in take(10,distinc(itra)
Sunday, March 27, 2016
Python Iterable and Iterator
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment