【问题标题】:How do you evenly distribute list with less length to another list?您如何将长度较短的列表平均分配到另一个列表?
【发布时间】:2020-11-26 18:22:03
【问题描述】:

我有两个列表。第一个名为 location,其长度可以从 1 到无穷大不等。

location = ['loc1,'loc2','loc3','loc4,'loc5','loc6','loc7,'loc8','loc9','loc10,'loc11','loc12','loc13,'loc14','loc15','loc16,'loc17','loc18','loc19,'loc20','loc21','loc22,'loc23','loc24','loc25','loc26','loc27',] <- Please note that length could from 1 to infinite number

第二个列表名为 auditor 。它的长度通常大于 location 列表长度。如果甚至没有将第一个或最后一个审核员分配到其他位置,我想将所有审核员平均分配到这些位置。

auditor = ['aone','atwo','athree','afour','afive','asix','aseven','aeight','anine','aten','aeleven','atwelve','athirteen','afourteen','afitheen','asixteen,'aseventeen''] <- Please note that length could from 1 to infinite number

下面的代码在大多数情况下都很好用,但是当位置为 28 且审核员为 17 时它会失败

df2['location'] = location
df2['auditor'] = [auditor[int(df2)] for df2 in np.arange(0, len(auditor), (len(auditor)/len(df2)))]

我想要的输出是获得最可能的均匀划分列表,并且它必须在任何情况下都有效,只要位置大于审计员。

My_desired_output = '一个', '一个' '两个', '两个', '三', '三', '四', '四', '五', '五', '六', '六', '七', '七', '八', '八', '安宁', '安宁', '吃', '吃', '十一', '十一', '十二点', “十三”, '十四', '十五', '十六', '十七']

【问题讨论】:

  • 在您的示例中,位置 > 审核员。代码适用于 ?

标签: python algorithm divide


【解决方案1】:

你可以考虑使用more-itertool中的chunked函数:

from more_itertools import chunked
from math import ceil
from typing import List, Any, Tuple, Iterator


def distribute_evenly(items: List[Any], cells: List[Any]) -> Iterator[Tuple[Any, List[Any]]]:
    if len(items) <= len(cells):
        item_chunks = [[item] for item in items] + [[]] * (len(cells) - len(items))
    else:
        chunk_size = int(ceil(len(items) / len(cells)))
        item_chunks = chunked(auditor, chunk_size)
    
    return zip(cells, item_chunks)


location = ["loc1", "loc2", "loc3"]
auditor = ["aud1", "aud2", "aud3", "aud4", "aud5", "aud6", "aud7", "aud8"]


auditor_per_location = list(distribute_evenly(auditor, location))

# auditor_per_location is now [('loc1', ['aud1', 'aud2', 'aud3']), ('loc2', ['aud4', 'aud5', 'aud6']), ('loc3', ['aud7', 'aud8'])]

祝你好运!

【讨论】:

  • 感谢您的回答,输出不是我想要的。它的列表列表
  • @Eegii 你想要的输出是什么?
  • 您还期待什么其他输出?
猜你喜欢
  • 2019-08-14
  • 1970-01-01
  • 2012-06-24
  • 2014-05-19
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多