将数字附加到列表中

时间:2013-03-09 21:19:21

标签: python python-2.7

urllist = ['http://example.com',
           'http://example1.com']
i = 0
while i < len(urllist):
    source = urllib.urlopen(urllist[i]).read()
    regex = '(\d{3})/">(\w+\s-\s\w+)</a>'  # e.g. '435', 'Tom-Jerry' 
    p = re.compile(regex)
    db = re.findall(p, source)
    db = [tuple(filter(None, t)) for t in db]   

    hero_id = []
    for j in db:
        hero_id.append(j[0])

    i += 1
print hero_id

请注意:db = [tuple(filter(None, t)) for t in db] db是这样的元组列表:[('564', 'Tom', 'Jerry'), ('321', 'X-man', 'Hulk')]。在hero_id = []线上,一切都像魅力一样。 for foop需要附加每个数字(来自urllist的每个网址)。它部分地完成了它的工作。最后hero_id列表仅包含最后一个网址中的数字(之前的数字已消失)。想法?

2 个答案:

答案 0 :(得分:4)

那是因为你在'while'(hero_id = [])的每次迭代中将hero_id设置为空列表

放在i = 0

之后

或者您可以像这样简化代码:

urllist = ['http://example.com', 'http://example1.com']
hero_id = []
for url in urllist:
    db = re.findall('(\d{3})/">(\w+\s-\s\w+)</a>', urllib.urlopen(url).read(), re.DOTALL)
    for j in db:
        hero_id.append(tuple(filter(None, j))[0])
print hero_id

答案 1 :(得分:1)

由于你的hero_id是在while循环中设置的,所以在每次迭代时都会覆盖它。 将您的hero_id变量设为全局变量,不要重置它。

hero_id = []
while ():
    #your code