python challenge 2:迭代与列表

python challenge 2:迭代与列表

http://www.pythonchallenge.com/pc/def/equality.html

本关在网页源代码中给了数量巨大的乱码字符串,要求找出隐藏在里面出现次数很少的字符

说起统计字符,那自然而然地想到使用python的字典dic

>>> for c in s:
    if c.isalpha():
        if d.has_key(c):
            d[c]+=1
        else:
            d[c]=1
            
>>> for k in d:
    print k,d[k]
    
e 1
q 1
u 1
a 1
l 1
i 1
t 1
y 1

看到了结果原来每个字母只出现了一次啊?那就好办了,直接按字母出现的顺序排成字符串即可

d=""
for c in s:
    if c.isalpha():
        d+=c

写得更pythonist就是

print ''.join([c for c in s if c.isalpha()])

 

解释一下上面解题用到的python相关内容:

三种列表类型的创立

list1=[] #建立一个空列表
dic1={} #建立一个空字典
tuple1=(1,2,3) #建立元组后不能改变,所以一般不建立空元祖

1、字典

三种建立字典的方法

dic1={'a':1,'b':2}
dic2=dict((['a',1],['b',2]))  #里面的括号作用是把列表变成一个变量
dic3={}.fromkeys(['x','y'],1)

字典可以直接迭代

for key in dict1:
    print key,dict1[key]

字典的其他操作

del dict1['a'] #删除一个item
dict1.clear() #清空字典
del dict1 #删除整个字典
dict1.keys() #返回所有键的列表
dict1.values() #返回所有值的列表
dict1.items() #返回所有键值对的列表
‘x’ in dic1 #判断x是否是dic1的键,相当于 dic1.has_key('x')

说完了字典,再说说最基础的列表

列表的操作都比较简单,跟C的数组差不多,不同的是迭代方式和分片

for i in range(0,10): #i从0到9迭代
>>> for i,val in enumerate(list1):
    print i,val
    
0 a
1 b
2 c

range可以使用下标迭代,enumerate可以自己给出列表的下标及值,非常方便

>>> list1[1:]
['b', 'c']
>>> list1[:2]
['a', 'b']
>>> list1[0:2]
['a', 'b']

列表的分片返回的也是一个列表。注意的是,分片区间是一个左闭右开区间,[a:b),并不包含下标为b的元素

>>> list2=set(list1)
>>> list2=list(list2)

对了,使用集合set的类型函数可以给列表、元组去掉重复的元素

posted @ 2013-08-19 22:00  iyjhabc  阅读(255)  评论(0编辑  收藏  举报