在Python中合并2个列表

时间:2016-04-15 21:13:44

标签: python merge

使用我当前的脚本

from lxml import html
import requests
from bs4 import BeautifulSoup
import re
import csv
import itertools


r = requests.get("http://www.mediamarkt.be/mcs/productlist/_128-tot-150-cm-51-tot-59-,98952,501091.html?langId=-17")

soup = BeautifulSoup((r.content),'lxml')

links = soup.find_all("h2")

g_data = soup.find_all("div", {"class": "price small"})

for item in g_data:
    prijs =[item.text.encode("utf-8") for item in g_data]

for link in links:
    if "TV" in link.text:
        product = [link.text.encode("utf-8").strip() for link in links if "TV" in link.text]

for item in itertools.chain(prijs + product):
    print item

我首先获得了所有" prijs"以及所有"产品。 例如: prijs prijs prijs 产品 产品 产品

我想得到以下结果 Prijs 产品

Prijs 产品

Prijs 产品

谢谢

1 个答案:

答案 0 :(得分:2)

问题的性质似乎与您的实际代码没什么关系,所以为了使这个问题对未来的读者有用,我将使用示例列表给出一般答案。

不要连接两个列表。使用zip生成对的列表,然后展平结果。

>>> lst1 = ['a1', 'a2', 'a3']
>>> lst2 = ['b1', 'b2', 'b3']
>>> [x for pair in zip(lst1, lst2) for x in pair]
['a1', 'b1', 'a2', 'b2', 'a3', 'b3']

使用itertools.chain,展平看起来更好一些。

>>> list(chain.from_iterable(zip(lst1, lst2)))
['a1', 'b1', 'a2', 'b2', 'a3', 'b3']

或者,解压缩:

>>> list(chain(*zip(lst1, lst2)))
['a1', 'b1', 'a2', 'b2', 'a3', 'b3']

由于您使用的是Python 2,因此使用itertools.izip代替zip(前者返回迭代器,后者返回列表)可以提高上述所有内存效率。