在Python中合并2个列表
使用我当前的脚本在Python中合并2个列表,python,merge,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 = Beautifu
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
我得到了一个列表,首先是所有的“Prij”,下面是所有的“产品”。
例如:
普里斯
普里斯
普里斯
产品
产品
产品
我想得到以下结果
普里斯
产品
普里斯
产品
普里斯
产品
谢谢问题的本质似乎与您的实际代码没有什么关系,因此为了使这个问题对未来的读者有用,我将使用示例列表为您提供一个一般性的答案 不要连接两个列表。使用
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
(前者返回一个迭代器,后者返回一个列表),可以提高上述所有内容的内存效率