【问题标题】:Replace consecutive delimiters in string with values from list用列表中的值替换字符串中的连续分隔符
【发布时间】:2022-11-30 14:17:18
【问题描述】:

我有一个字符串,例如:

s = "I ? am ? a ? string"

我有一个长度等于字符串中 ? 数量的列表:

l = ['1', '2', '3']

返回 s 并将每个连续的 ? 替换为 l 中的值的 pythonic 方法是什么?,例如:

s_new = 'I 1 am 2 a 3 string'

【问题讨论】:

    标签: python


    【解决方案1】:

    2种方法:

    # Method 1
    s = "I ? am ? a ? string"
    l = ['1', '2', '3']
    
    for i in l:
        s = s.replace('?', i, 1)
    # Output: I 1 am 2 a 3 string
    

    # Method 2
    from functools import reduce
    s = "I ? am ? a ? string"
    l = ['1', '2', '3']
    
    s = reduce(lambda x, y: x.replace('?', y, 1), l, s)
    # Output: I 1 am 2 a 3 string
    

    【讨论】:

    • 我很乐意花时间真正理解 reduce 和 lambda 表达式!感谢您提供的两种方法。我没有意识到 replace 允许替换有限次数的事件:)
    【解决方案2】:

    你可以使用zip_longestjoin

    >>> s = 'I ? am ? a ? string'
    >>> l = ['1', '2', '3']
    >>> ''.join(x for xs in zip_longest(s.split('?'), l, fillvalue='') for x in xs)
    'I 1 am 2 a 3 string'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2021-03-11
      • 2011-12-23
      • 2021-08-02
      • 2010-10-19
      相关资源
      最近更新 更多