Python TypeError:只能将元组(而不是“int”连接到元组 urlist=['http://example.com', 'http://example1.com'] i=0 而我(\w+\s-\s\w+”,例如“435”、“Tom Jerry” p=重新编译(正则表达式) db=re.findall(p,源) db=[tuple(filter(None,t))表示t,单位为db] 英雄id=[] 对于以db表示的i: 英雄id.append(i[0]) i+=1 打印英雄身份证
Python TypeError:只能将元组(而不是“int”连接到元组 urlist=['http://example.com', 'http://example1.com'] i=0 而我(\w+\s-\s\w+”,例如“435”、“Tom Jerry” p=重新编译(正则表达式) db=re.findall(p,源) db=[tuple(filter(None,t))表示t,单位为db] 英雄id=[] 对于以db表示的i: 英雄id.append(i[0]) i+=1 打印英雄身份证,python,python-2.7,Python,Python 2.7,db=[tuple(filter(None,t))for t in db]db是这样一个元组列表:[('564','Tom','Jerry'),('321','X-man','Hulk')] 这背后的逻辑应该是:从urlist[0]开始,搜索正则表达式,收集db,对于db中的每个元组,从元组(数字)中获取[0]元素然后将其附加到hero\u id列表中。完成后,在i中添加1,并在没有剩余url的情况下,对urlist中的下一个url重复整个过程 当我运行此代码时,我得到以下结果: i+=1 Ty
db=[tuple(filter(None,t))for t in db]
db
是这样一个元组列表:[('564','Tom','Jerry'),('321','X-man','Hulk')]
这背后的逻辑应该是:从urlist[0]
开始,搜索正则表达式,收集db
,对于db
中的每个元组,从元组(数字)中获取[0]
元素然后将其附加到hero\u id
列表中。完成后,在i
中添加1,并在没有剩余url的情况下,对urlist
中的下一个url重复整个过程
当我运行此代码时,我得到以下结果:
i+=1
TypeError:只能将元组(而不是“int”)连接到元组
代码中的i+=1在for循环之外,所以这个异常有点让我吃惊。想法?在db中的“for i”循环为i分配一个元组。i的范围是函数(或模块,如果这是模块范围代码)
Python 2中唯一有自己作用域的循环语法是生成器表达式。for i in db”循环将一个元组分配给i。i的作用域是函数(或模块,如果这是模块作用域代码)
Python 2中唯一有自己作用域的循环语法是生成器表达式。db中i的for循环
:
在while
循环中更改i
的值for循环中的名称。for循环for i in db:
正在while
循环中更改i
的值。在for循环中使用另一个(更具描述性)名称。非常感谢大家。看起来很简单,但永远无法解决它。这当然有效;不过还有第二个问题。它是附加的(到hero\u id
列表)只有来自urlist
hmm的第二个url中的数字。我猜append
method首先从第一个链接中追加数字,然后从第二个url中删除它们和追加的数字。可能有其他方法的想法吗?列表中的项目没有被删除。相反,您的循环第二次创建了一个新的空列表循环。这本身对您第一次创建的第一个列表没有任何影响。但是,由于名称“hero_id”现在绑定到另一个列表,并且不再有名称绑定到第一个列表,因此您无法再获得第一个列表(并且它将被垃圾收集)。如果您希望列表中包含所有id,只需将hero_id=[]行移出循环即可。非常感谢各位。看起来很简单,但永远无法解决它。这当然起作用;但还有第二个问题。它附加(到hero_id
列表中)只有来自urlist
hmm的第二个url中的数字。我猜append
method首先从第一个链接中追加数字,然后从第二个url中删除它们和追加的数字。可能有其他方法的想法吗?列表中的项目没有被删除。相反,您的循环第二次创建了一个新的空列表循环。这本身对您第一次创建的第一个列表没有任何影响。但是,由于名称“hero_id”现在绑定到另一个列表,并且不再有名称绑定到第一个列表,因此您无法再获得第一个列表(并且它将被垃圾收集)。如果希望列表中包含所有id,只需将hero_id=[]行移出循环即可
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 i in db:
hero_id.append(i[0])
i += 1
print hero_id