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 · 2021-04-22 17:39:23 +08:00 · 3150 次点击
    这是一个创建于 1340 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
       2021-04-22 17:42:22 +08:00
    from itertools import product
    product(a, b)
    abersheeran
        2
    abersheeran  
       2021-04-22 17:43:53 +08:00 via Android   ❤️ 8
    你这不叫合并,你这是算笛卡尔积。循环是少不了的,但是写法可以不一样。用 map 或者推导式。
    ZoeYn
        3
    ZoeYn  
    OP
       2021-04-22 17:44:16 +08:00
    @cassidyhere 试了一下,可以!!
    ZoeYn
        4
    ZoeYn  
    OP
       2021-04-22 17:44:34 +08:00
    @abersheeran 搜嘎!我去补一补这个知识,谢谢!
    JackCooper
        5
    JackCooper  
       2021-04-22 17:46:44 +08:00
    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  
       2021-04-22 17:55:58 +08:00
    @JackCooper a.product(b)
    encounter2017
        7
    encounter2017  
       2021-04-22 18:38:35 +08:00   ❤️ 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  
       2021-04-22 18:48:33 +08:00
    Numpy 不是一堆矩阵方法吗
    cyspy
        10
    cyspy  
       2021-04-22 19:26:45 +08:00
    [(x, y) for x in a for y in b]
    Lordon
        11
    Lordon  
       2021-04-22 20:01:17 +08:00
    可以参考 leetcode17 题 形式上很像
    css3
        12
    css3  
       2021-04-22 20:26:48 +08:00
    ret = [[str(x) + y] for x in a for y in b]
    ZoeYn
        13
    ZoeYn  
    OP
       2021-04-23 08:59:58 +08:00
    @css3
    @Lordon
    @cyspy
    @Codewj
    @bxb100
    @encounter2017
    @hyrious
    @JackCooper
    好嘞,谢谢各位前辈~
    raaaaaar
        14
    raaaaaar  
       2021-04-23 09:49:37 +08:00
    都是 O(n^2) 的,数据库连接操作就以这个为基础,如果能优化数据库早干了
    liuxingdeyu
        15
    liuxingdeyu  
       2021-04-23 10:02:37 +08:00
    这。。。笛卡尔积无解,就得一个一个算,无非就是写法上优雅点,map 、reduce 、lambda 啥的
    HashV2
        16
    HashV2  
       2021-04-23 11:25:36 +08:00
    itertools 库看一遍吧,方法不多 但是都很好用
    sugarkeek
        17
    sugarkeek  
       2021-04-23 12:45:41 +08:00
    就算是库也是这么一个一个合并的
    ZoeYn
        18
    ZoeYn  
    OP
       2021-04-28 09:05:19 +08:00
    @raaaaaar
    @liuxingdeyu
    @sugarkeek
    好吧 哈哈哈这个好像确实没办法
    ZoeYn
        19
    ZoeYn  
    OP
       2021-04-28 09:06:17 +08:00
    @HashV2 嗯嗯嗯 我之前还不知道这个库,,一直写俩循环来着
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:12 · PVG 03:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.