用python分发列表

用python分发列表,python,distribution,Python,Distribution,假设我有一个配置字典: config = {'A': 3, 'B': 4, 'C': 2} 我如何按如下方式平铺(散布)列表: (逐个追加到结果列表中,仍然是所有配置的结尾) 另一个例子是: config = {'A': 3, 'B': 1} result = ['A', 'B', 'A', 'A'] config = {'A': 2, 'B': 2} result = ['A', 'B', 'A', 'B'] 如果计数太大,并且您担心性能和内存消耗,您可以使用repeat,而不是像这样重

假设我有一个配置字典:

config = {'A': 3, 'B': 4, 'C': 2}
我如何按如下方式平铺(散布)列表: (逐个追加到结果列表中,仍然是所有配置的结尾)

另一个例子是:

config = {'A': 3, 'B': 1}
result = ['A', 'B', 'A', 'A']

config = {'A': 2, 'B': 2}
result = ['A', 'B', 'A', 'B']
如果计数太大,并且您担心性能和内存消耗,您可以使用
repeat
,而不是像这样重建列表列表

from itertools import izip_longest as izip_l, chain, repeat
expanded = [repeat(k, config[k]) for k in config]
其余的都是相同的

您可以使用
roundrobin
进行此操作:

from itertools import cycle, islice

def roundrobin(*iterables):
    "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
    # Recipe credited to George Sakkis
    pending = len(iterables)
    nexts = cycle(iter(it).next for it in iterables)
    while pending:
        try:
            for next in nexts:
                yield next()
        except StopIteration:
            pending -= 1
            nexts = cycle(islice(nexts, pending))

result = list(roundrobin(*(k * v for k, v in sorted(config.items()))))
没有任何额外的lib

main_config = {'A': 3, 'C': 4, 'B': 2}
config = main_config
list = []
for lp in range(max(config.values())):
    for key in config.keys():
        val = config.get(key)
        if val != 0:
            list.append(key)
            config.update({key:val-1})
print list
输出:

['A', 'C', 'B', 'A', 'C', 'B', 'A', 'C', 'C']

你试过什么吗?展示它!你应该设法解决你的问题,并就遇到的问题提出具体的问题。这不是一个代码编写服务(尽管有时看起来是这样的。)hi@tichodromamuraria。我可以用一种简单的方法在C中解决这个问题。首先按行将每个配置添加到矩阵中。然后按列提取矩阵打印出来。我想问的是python中是否有其他/更好的解决方案,尤其是python方式。
main_config = {'A': 3, 'C': 4, 'B': 2}
config = main_config
list = []
for lp in range(max(config.values())):
    for key in config.keys():
        val = config.get(key)
        if val != 0:
            list.append(key)
            config.update({key:val-1})
print list
['A', 'C', 'B', 'A', 'C', 'B', 'A', 'C', 'C']