V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ZoeYn
V2EX  ›  Python

有没有比较优雅的合并两个列表的方法?

  •  
  •   ZoeYn · 26 天前 · 1693 次点击
    a = [1,2]
    b = [a,b,c,f]

    l = [[1,a],[1,b],[1,c],[1,f],[2,a],[2,b],[2,c],[2,f]]

    请问,除了双层 for 循环之外还有别的办法吗?
    19 条回复    2021-04-28 09:06:17 +08:00
    cassidyhere
        1
    cassidyhere   26 天前
    from itertools import product
    product(a, b)
    abersheeran
        2
    abersheeran   26 天前 via Android   ❤️ 8
    你这不叫合并,你这是算笛卡尔积。循环是少不了的,但是写法可以不一样。用 map 或者推导式。
    ZoeYn
        3
    ZoeYn   26 天前
    @cassidyhere 试了一下,可以!!
    ZoeYn
        4
    ZoeYn   26 天前
    @abersheeran 搜嘎!我去补一补这个知识,谢谢!
    JackCooper
        5
    JackCooper   26 天前
    ruby 的话

    2.5.7 :001 > a = [1,2,3,4]
    => [1, 2, 3, 4]
    2.5.7 :002 > b = ['a', 'b' ,'c', 'd']
    => ["a", "b", "c", "d"]
    2.5.7 :003 > a.zip(b)
    => [[1, "a"], [2, "b"], [3, "c"], [4, "d"]]
    hyrious
        6
    hyrious   26 天前
    @JackCooper a.product(b)
    encounter2017
        7
    encounter2017   26 天前   ❤️ 1
    python 的话

    from itertools import product
    a = [1,2]
    b = ['a','b','c']

    list(product(a,b))
    # [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]

    scala 的话

    scala> for {
    | a <- List(1, 2)
    | b <- List('a', 'b', 'c')
    | } yield (a,b)
    val res1: List[(Int, Char)] = List((1,a), (1,b), (1,c), (2,a), (2,b), (2,c))
    bxb100
        8
    bxb100   26 天前
    Numpy 不是一堆矩阵方法吗
    cyspy
        10
    cyspy   26 天前
    [(x, y) for x in a for y in b]
    Lordon
        11
    Lordon   25 天前
    可以参考 leetcode17 题 形式上很像
    css3
        12
    css3   25 天前
    ret = [[str(x) + y] for x in a for y in b]
    ZoeYn
        13
    ZoeYn   25 天前
    @css3
    @Lordon
    @cyspy
    @Codewj
    @bxb100
    @encounter2017
    @hyrious
    @JackCooper
    好嘞,谢谢各位前辈~
    raaaaaar
        14
    raaaaaar   25 天前
    都是 O(n^2) 的,数据库连接操作就以这个为基础,如果能优化数据库早干了
    liuxingdeyu
        15
    liuxingdeyu   25 天前
    这。。。笛卡尔积无解,就得一个一个算,无非就是写法上优雅点,map 、reduce 、lambda 啥的
    HashV2
        16
    HashV2   25 天前
    itertools 库看一遍吧,方法不多 但是都很好用
    sugarkeek
        17
    sugarkeek   25 天前
    就算是库也是这么一个一个合并的
    ZoeYn
        18
    ZoeYn   20 天前
    @raaaaaar
    @liuxingdeyu
    @sugarkeek
    好吧 哈哈哈这个好像确实没办法
    ZoeYn
        19
    ZoeYn   20 天前
    @HashV2 嗯嗯嗯 我之前还不知道这个库,,一直写俩循环来着
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2570 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:35 · PVG 19:35 · LAX 04:35 · JFK 07:35
    ♥ Do have faith in what you're doing.