0

我正在尝试遍历两个列表并用它创建元组,然后返回列表。

m = re.findall(reg, request) //List of all names from website
i = re.findall(reg2, request) //job title.

lst = []
for name in m:
    for job in i: #<======= Can't access name after this point
        if name and job:
            tub = (name, job)
            if tub not in lst:
                lst.append(tub)
        elif name:
            tub = (name, None)
            if tub not in lst:
                lst.append(tub)

print(lst)
return lst

有了这个输入,它是:

print(m) -> ['Name Nameson']
print(i) -> [] 

但似乎我无法访问内部循环中的 name 变量。如果在外部循环中设置 print(name) 它会显示,但不会在内部循环中。所以返回总是[]。

我是 python 新手,我在这里做错了什么?

4

4 回答 4

1
for i in range(10):
    for j in range(10):
        print i,j

你做错了什么......如果没有看到你的输入很难说更多......在你的代码中你的 i = []

所以

for item in []:
   print "this will never print"
于 2013-07-29T22:52:49.990 回答
1

在处理可迭代对象的排列时,我喜欢在itertools中使用函数。itertools.product应该做你想做的。

>>> from itertools import product

>>> l1 = [1, 2, 3, 4]
>>> l2 = ['a', 'b', False, 'd']

>>> list((x, y) if y else (x, None) for x, y in product(l1, l2) if x)

[(1, 'a'), (1, 'b'), (1, None), (1, 'd'), (2, 'a'), (2, 'b'), (2, None),
 (2, 'd'), (3, 'a'), (3, 'b'), (3, None), (3, 'd'), (4, 'a'), (4, 'b'),
 (4, None), (4, 'd')]
于 2013-07-29T22:53:58.170 回答
1

您的输出说明了一切, list i 是一个空列表,因此您的嵌套作业循环不会事件循环一次。所以不是'name'没有被带入嵌套循环,而是你甚至没有进入嵌套循环块。

于 2013-07-29T23:00:44.117 回答
0

为什么不使用列表理解和集合呢?

list(set([(name, job) for name in m for job in i]))
于 2013-07-29T22:54:13.060 回答