我可以用两种方式编写追加行。均未产生预期的结果。有没有一种方法可以将其包装成一行?
选项1:
row.append(x[1] for x in emails if x[0] == row[1])
产量:
[['project1', 'email1', <generator object <genexpr> at 0x0227D670>], ['project1', 'email2', <generator object <genexpr> at 0x022EB8A0>]]
选项2:
row.append([x[1] for x in emails if x[0] == row[1]])
产量:
[['project1', 'email1', ['[email protected]']], ['project1', 'email2', ['[email protected]']]]
预期结果:
[['project1', 'email1', '[email protected]'], ['project1', 'email2', '[email protected]']]
码:
emails = [['email1','[email protected]'],['email2','[email protected]']]
projects = [['project1', 'email1'], ['project1', 'email2']]
for row in projects:
row.append(x[1] for x in emails if x[0] == row[1])
print projects
python大神给出的解决方案
在您现有的代码中,替换这一行:
row.append(x[1] for x in emails if x[0] == row[1])
带有:
row.extend(x[1] for x in emails if x[0] == row[1])
一线解决方案
或者,消除循环并将代码压缩成一行:
>>> projects = [ row + [x[1] for x in emails if x[0] == row[1]] for row in projects ]
>>> print projects
[['project1', 'email1', '[email protected]'], ['project1', 'email2', '[email protected]']]