#####################################################################
############################### LEC 12 ##############################
#####################################################################

z = [1,2,3,4,5,6,7,8,9,10]
z[3:6] = ["a","b","c"]
z 
z[3:6] = ["a", "b"] * 2 
z
z[4:]=[]
z
z[:0] = ["al", "be"]
z


"a" in "cat" 
"a" in "entebbe"
"a" in ("c" , "a", "t") 
2 in [1,2,3,4,5]
2 in [1,4,"92",2.4]




for x in ["how", "many", "cannonballs"]:
  print x,len(x) 


for c in "chimichanga":
  print c*3 





s=0
z=(1,2,3,4.0,"5")    #tuple
for i in z:
  s = s + i


s=0
for i in z:
  s=s+float(i)
s







mexmenu = [("burrito",3.50),("taco",1.90),("sopa",2.50),("quesadilla",3.00),("frijole",0.75)] 

for i,p in mexmenu:
  print "One",i,"costs",p

range(10)

for i in range(10):print i

range(5,15)

range(15,5,-1)

def dup1(s,k):
   for x in s:
     print x
     s[len(s):] = x*k


def dup2(s,k):
   for x in s:
     print x
     s = s + x*k
return s

def dup3(s,k):
  for x in s[:]:
     print x
     s = s + x*k
return s





def dup(x):
  return 2*x


z = range(10)
map(dup,z)

map(dup,"chimichanga")

def even(x): return int(x)%2==0
filter(even,range(10))
filter(even,"1234096001234125")
filter(even,(1,2.0,3.2,4))

def add(x,y): x+y

reduce(add,range(10),0)

def fac(x): 
  def mul(x,y): return x*y
  return reduce(prod,range(x+1),1)

fac(5)

>>> [ x*x for x in range(10)]
[0,1,4,9,16,25,36,49,64,81]
>>> [2*x for x in "avra kedavra"]
["aa","vv","rr","aa","  ","kk","aa"]







[ x*x for x in range(10) if even(x)]
[ 2*x for x in "0123456" if even(x)]
[z[0] for z in mexmenu if z[1]<3.0]


[(x,y) for x in range(3) for y range(3)]

[(x,y) for x in range(3) for y in range(#) if x > y]



def sort(L):
  if L==[]: return L
  else:
    l=sort([x for x in s[1:] if x < s[0])
    r=sort([x for x in s[1:] if x >= s[0])
    return(l+L[0:1]]+r)


sort([1,44,12,31,34])

d={}
d=dict(mexmenu)
d["ceviche"] = 3.95
d
d["burrito"]
d.keys()

d.values()

def freq(s):
  d={}
  for c in s:
    if c in d: d[c]+=1
    else: d[c]=1
  return d

def plotfreq(s):
  d=freq(s)
  for k in d.keys():
    print k, "*"*d[k]
  return d
		
plotfreq([1,1,3.0,"A",3.0,"A","A",1,2,3.0,1,"A"])
d=plotfreq("avrakedavra")
d.keys()

