在列表中重新放置str,其中n个字符串从0开始

2024-10-01 02:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: to字符串列表整数greenballotstvcpc
3条回答

下面是一个使用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

只需使用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

也可以将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']]

相关问题 更多 >