【问题标题】:Relplace str in list with n many strings starting from 0用从 0 开始的 n 个字符串替换列表中的字符串
【发布时间】:2019-11-14 21:44:20
【问题描述】:

给定一个列表列表和一个整数,我需要用 n 个字符串替换每个字符串。 其中 n = 给定的整数。 例如:

irv_to_stv_ballot([['NDP', 'CPC'], ['GREEN']], 3)
[['NDP0', 'NDP1', 'NDP2', 'CPC0', 'CPC1', 'CPC2'], ['GREEN0', 'GREEN1', 'GREEN2']]

【问题讨论】:

  • 你试过什么?而且您似乎是在追加,而不是替换

标签: python python-3.x list for-loop


【解决方案1】:

只需使用 loopslist comprehension :对于每个子列表的每个单词,将数字从 0 连接到极限:

def irv_to_stv_ballot(values, count):
    return [[word + str(digit) for word in value for digit in range(count)] for value in values]


def irv_to_stv_ballot(values, count):
    result = []
    for value in values:
        inner_res = []
        for word in value:
            for count in range(count):
                inner_res.append(word + str(count))
        result.append(inner_res)
    return result

【讨论】:

  • 第一个函数最终起作用了!第二个产生了稍微不同的结果。感谢您的帮助!
  • @MatthewTabet 真的吗?我完全一样
【解决方案2】:

这是一个使用 lambda 的变体:

def replace(items: list, value: int) -> list:
    """takes a list of lists of strings and an int"""
    func = lambda x, y: x + str(y)
    for i, sublist in enumerate(items):
        tempA = []
        for sequence in sublist:
            tempB = [func(sequence, x) for x in range(value)]
            tempA.extend(tempB)
        items[i] = tempA
    return items

【讨论】:

    【解决方案3】:

    您也可以将itertools.repeatenumerate() 一起使用:

    from itertools import repeat
    
    
    def irv_to_stv_ballot(values, count):
        return [
            ["%s%d" % (e, i) for item in value for i, e in enumerate(repeat(item, count))]
            for value in values
        ]
    
    
    print(irv_to_stv_ballot([["NDP", "CPC"], ["GREEN"]], 3))
    

    输出:

    [['NDP0', 'NDP1', 'NDP2', 'CPC0', 'CPC1', 'CPC2'], ['GREEN0', 'GREEN1', 'GREEN2']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2016-02-06
      • 1970-01-01
      • 2013-05-01
      • 2012-08-18
      • 1970-01-01
      相关资源
      最近更新 更多