You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个Python函数返回的结果列表合并为一个新列表?

解决多个爬虫函数返回列表的合并及统计问题

你已经在代码里用了列表相加(all_cars = result1 + result2 + result3)的方式合并三个函数的返回结果,这本身是正确的列表合并方法,但你的代码存在数据类型不统一的问题,会直接影响后续计算最低价、最高价和平均价,下面是修正方案:

1. 统一价格数据类型

三个函数返回的列表元素类型混乱:

  • bestauto返回字符串类型的价格
  • autovit同时存在字符串和浮点数类型的价格
  • anuntul_ro返回字符串类型的价格

统计计算需要统一为浮点数,修改每个函数如下:

修改后的bestauto函数

def bestauto(driver):
    driver.get("https://www.bestauto.ro/auto/?q=volvo+xc90+2020&pag=1&carregistrationdate=2020-2021")
    wait.until(EC.element_to_be_clickable((By.ID, 'cookieAccept'))).click()
    block = driver.find_elements(By.XPATH, ".//div[@class='listing-data']")

    result_bestauto = []
    for i in block:
        prices = i.find_element(By.XPATH, ".//strong[@class='price maincolor']").text
        price = prices.strip(' EUR').replace(' ', '.')
        # 转换为浮点数存入列表
        result_bestauto.append(float(price))
    return result_bestauto

修改后的autovit函数

def autovit(driver):
    driver.execute_script("window.open('');")
    driver.switch_to.window(driver.window_handles[1])
    driver.get("https://www.autovit.ro/autoturisme/volvo/xc-90/seg-suv/de-la-2020?search%5Bfilter_enum_generation%5D=gen-ii-2015&search%5Bfilter_float_year%3Ato%5D=2021")
    wait.until(EC.element_to_be_clickable((By.ID, 'onetrust-accept-btn-handler'))).click()
    wait.until(EC.element_to_be_clickable((By.XPATH, ".//div[@class='ooa-z4wqde eg0t0xb1']"))).click()
    cars = driver.find_elements(By.XPATH, ".//article[@class='ooa-1txt27o e1b25f6f0']")

    result_autovit = []
    for y in cars:
            car_cost = y.find_element(By.XPATH, ".//span[@class='ooa-1bmnxg7 e1b25f6f11']").text
            cost = car_cost.strip("EUR ").replace(' ', '.')
            au = float(cost)
            # 直接存储浮点数,后续输出再格式化
            result_autovit.append(au)

    if len(cars) < 6:
        promoted_car = driver.find_element(By.XPATH, ".//article[@class='ooa-1wl9plw e1b25f6f0']")
        pretulMasinii = promoted_car.find_element(By.XPATH, ".//span[@class='ooa-1bmnxg7 e1b25f6f11']").text
        pret = pretulMasinii.strip("EUR ").replace(' ', '.')
        a = float(pret)
        result_autovit.append(a)

    return result_autovit

修改后的anuntul_ro函数

def anuntul_ro(driver):
    driver.execute_script("window.open('');")
    driver.switch_to.window(driver.window_handles[2])
    driver.get("https://www.anuntul.ro/anunturi-auto-moto/autoturisme/?search%5Bsumar%5D%5BrubricaId%5D=5&search%5Bsumar%5D%5BsubrubricaId%5D=30&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B0%5D%5Bvalue%5D=Volvo&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B0%5D%5Bfields%5D%5B1%5D%5Bvalue%5D%5B%5D=XC90&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B2%5D%5Bvalue%5D%5Bmin%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B2%5D%5Bvalue%5D%5Bmax%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B3%5D%5Bvalue%5D%5Bmin%5D=2017&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B3%5D%5Bvalue%5D%5Bmax%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B5%5D%5Bvalue%5D%5Bmin%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B5%5D%5Bvalue%5D%5Bmax%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B7%5D%5Bvalue%5D%5Bmin%5D=&search%5Bfields%5D%5B0%5D%5Bfields%5D%5B7%5D%5Bvalue%5D%5Bmax%5D=&search%5BcautareId%5D=&search%5Bquery%5D=&search%5Blat%5D=&search%5Blng%5D=&search%5Bsortf%5D=valabilitate.sort&search%5Bsorts%5D=-1&search%5Bpage%5D=&search%5Bowner%5D=")
    time.sleep(3)
    wait.until(EC.element_to_be_clickable((By.ID, 'acordCookies'))).click()
    masini = driver.find_elements(By.XPATH, ".//div[@class='clearfix line-btw anunt-row i-cb i-pr anunt-w  ']")
    result_anuntul_ro = []
    for x in masini:
        pret_masina = x.find_element(By.XPATH, ".//div[@class='float-right price-list i-fr']").text
        valuare = pret_masina.strip(" €").replace(' ', '.')
        an = float(valuare)
        # 直接存储浮点数
        result_anuntul_ro.append(an)
    return result_anuntul_ro

2. 合并列表并计算统计值

修正后保留原合并逻辑,添加统计计算代码:

if __name__ == "__main__":
    result1 = bestauto(driver)
    result2 = autovit(driver)
    result3 = anuntul_ro(driver)
    all_cars = result1 + result2 + result3
    
    # 计算并输出统计值,先判断列表非空避免报错
    if all_cars:
        min_price = min(all_cars)
        max_price = max(all_cars)
        avg_price = sum(all_cars) / len(all_cars)
        
        # 格式化输出保留3位小数
        print(f"最低价: {min_price:.3f} EUR")
        print(f"最高价: {max_price:.3f} EUR")
        print(f"平均价: {avg_price:.3f} EUR")
    else:
        print("未爬取到任何价格数据")
    
    # 最后关闭浏览器释放资源
    driver.quit()

其他可选的列表合并方式

除了+号,还有两种常用合并方法:

  • 使用extend()方法:
    all_cars = []
    all_cars.extend(result1)
    all_cars.extend(result2)
    all_cars.extend(result3)
    
  • 使用列表推导式(适合批量合并多个列表):
    all_cars = [price for lst in [result1, result2, result3] for price in lst]
    

内容的提问来源于stack exchange,提问作者user20468552

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:46:04