python - 如何合并两个列表

标签 python python-2.7 list-comprehension

我可以用两种方式编写附加行。两者都不会产生期望的结果。有没有办法将其包装在一行中?

选项 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', ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="83e9ecebedc3e4eee2eaefade0ecee" rel="noreferrer noopener nofollow">[email protected]</a>']], ['project1', 'email2', ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5b7bcb9b995b2b8b4bcb9fbb6bab8" rel="noreferrer noopener nofollow">[email protected]</a>']]]

期望的结果:

[['project1', 'email1', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0babfb8be90b7bdb1b9bcfeb3bfbd" rel="noreferrer noopener nofollow">[email protected]</a>'], ['project1', 'email2', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abc9c2c7c7ebccc6cac2c785c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>']]

代码:

emails = [['email1','<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2a404542446a4d474b434604494547" rel="noreferrer noopener nofollow">[email protected]</a>'],['email2','<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94f6fdf8f8d4f3f9f5fdf8baf7fbf9" rel="noreferrer noopener nofollow">[email protected]</a>']]

projects = [['project1', 'email1'], ['project1', 'email2']]

for row in projects:
    row.append(x[1] for x in emails if x[0] == row[1])
print projects

最佳答案

在现有代码中,替换这一行:

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', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="53393c3b3d13343e323a3f7d303c3e" rel="noreferrer noopener nofollow">[email protected]</a>'], ['project1', 'email2', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bcded5d0d0fcdbd1ddd5d092dfd3d1" rel="noreferrer noopener nofollow">[email protected]</a>']]

关于python - 如何合并两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28289181/

相关文章:

python - 有没有办法更快地运行 OpenCV 的 SIFT?

python - 如何使用类 {web-scraping beautifulsoup python} 查找特定 div 之间的文本

python - scrapy 从脚本运行蜘蛛

python - 在 Windows 中处理 unicode 子进程环境的正确方法是什么?

haskell - 整理 Haskell 中的列表理解

python - pandas如何计算索引?

python - 与 pandas 中的 dropna() 相反

python - matplotlib 动画中数组的不同颜色点

python - 使用列表理解将字符串列表转换为列表列表

python - 如何使用列表推导式使每个元素成为 zip() 的列表?