首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
Coding
V2EX  ›  Python

[['chang'], ['du'], ['zhang', 'chang']] 如何拼成 “changduchangchangduzhang”呢

  •  
  •   twor · 314 天前 · 2021 次点击
    这是一个创建于 314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [['chang'], ['du'], ['zhang', 'chang']] 如何拼成 “ changduchangchangduzhang ”呢
    用途就是生成字段的拼音的各种情况,方便拼音检索
    或者有其他思路?
    第 1 条附言  ·  314 天前
    感谢 @Procumbens ,100%符合,结帖

    其他的有些童鞋估计没有领会到我神一般的表达,不是我要的
    另外一些,我的确看不懂,比如 @momocraft @jiejiss 等 ,我正在通过谷歌学习他们的回帖,:(

    再补充下应用场景
    比如 有一个字段是 “长度长”,我希望用户无论是搜索,“ cdc ” 或者 “ cdz ” 都可以搜索到
    17 回复  |  直到 2019-02-15 00:44:39 +08:00
        1
    zst   314 天前 via Android
    可以 flatten 以后直接拼起来?
        2
    momocraft   314 天前   ♥ 1
    .reduce(笛卡尔积).map(join).join (然后自己改成 python 语法)
        3
    EulerChen   314 天前 via Android   ♥ 1
    arr.flat().join('')即可

    flat 特性已在 ES2019 正式支持
        4
    sdijeenx   314 天前   ♥ 1
    >>> for i in itertools.permutations([['chang'], ['du'], ['zhang', 'chang']] , 3):
    ... print(i)
    ...
    (['chang'], ['du'], ['zhang', 'chang'])
    (['chang'], ['zhang', 'chang'], ['du'])
    (['du'], ['chang'], ['zhang', 'chang'])
    (['du'], ['zhang', 'chang'], ['chang'])
    (['zhang', 'chang'], ['chang'], ['du'])
    (['zhang', 'chang'], ['du'], ['chang'])

    这样应该满足 LZ 要求=3=
        5
    Trim21   314 天前 via Android
    先 flat 再 join
        6
    Procumbens   314 天前   ♥ 2
    import itertools
    sample = [['chang'], ['du'], ['zhang', 'chang']]
    result = list(itertools.product(*sample))
    for i in result:
    print(''.join(i))
        7
    Procumbens   314 天前   ♥ 1
    就 2L 说的笛卡尔积是对的,LS 说 flat 的都没了解 LZ 想要什么……
    BTW,LS 我的代码最后一行的缩进被吃了👀
        8
    sdijeenx   314 天前   ♥ 1
    刚才又写了个偷鸡算法,结果还是 LS 的更好用。
        9
    FreeEx   314 天前 via iPhone   ♥ 1
    flatMap 成一个数组,然后拼成一个串。
        10
    loading   314 天前 via Android   ♥ 1
    楼上都很厉害,我只能发个结帖算法了:
    if foo=="[['chang'], ['du'], ['zhang', 'chang']] " then
    foo="changduchangchangduzhang"
        11
    fonlan   314 天前 via Android   ♥ 1
    再来个另类的,把 List 转 str 然后用正则取出所有字母即可
        12
    jiejiss   314 天前 via Android   ♥ 1
    用 built in 的工具库算笛卡尔积,或者手写 DFS。DFS 递归写着还蛮方便的。之前不知道笛卡尔积的时候就是手写的 DFS
        13
    jiejiss   314 天前 via Android   ♥ 1
    或者把大数组当成一个有向图,每个子数组都是一层,每个字符串是一个节点。之后强行在最前面插一个空字符串节点来充当根结点。之后遍历一遍就好了
        14
    wuhaochen999   314 天前
    cartesian product
        15
    Ama2in9   314 天前 via iPhone
    @loading 哈哈哈哈哈你他娘的真是个人才
        16
    qilishasha   313 天前
    @loading 优秀的程序员很多,有趣的灵魂唯独你一只
        17
    luoleng   301 天前
    ''.join(re.findall(r'\w+?', str(your_list)))
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1719 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 00:04 · PVG 08:04 · LAX 16:04 · JFK 19:04
    ♥ Do have faith in what you're doing.