首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中扩展列表

在Python中扩展列表
EN

Stack Overflow用户
提问于 2012-10-21 03:37:37
回答 3查看 1.4K关注 0票数 2

举个例子:我有一个列表[1,2,3,4,5,6,7,8],我需要把它“拉长”到20,让现有的值尽可能均匀地分布,用None替换“缺失”的值,结果列表必须从1开始,以8结束。

在原始列表中的值之间有8-1个空格和20-8个无要分配的值,所以我们可以为每个“空格”设置一个“无”。

代码语言:javascript
复制
[1, None, 2, None, 3, None, 4, None, 5, None, 6, None, 7, None, 8]

现在我们仍然有12-7个None值要分发,我们可以在每隔一个空间分发其中的4个:

代码语言:javascript
复制
[1, None, None, 2, None, 3, None, None, 4, None, 5, None,None 6, None, 7, None,
    None, 8]

现在我们还剩下一个可以随机分配的:

代码语言:javascript
复制
[1, None, None, 2, None, 3, None, None, 4, None, 5, None, None, 6, None, None 7, 
    None, None, 8]

有没有一种算法可以让你完成这样的任务?也许是一个实现?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-21 03:44:14

基本思想:只需从旧位置线性插值新位置。为了简单起见,我们使用地板除法,但您可以更聪明地使用四舍五入除法,以获得稍微均匀的分布。

代码语言:javascript
复制
def stretch_to(l, n):
    out = [None] * n
    m = len(l)
    for i, x in enumerate(l):
        out[i*(n-1)//(m-1)] = x

    return out

示例:

代码语言:javascript
复制
>>> stretch_to(range(8), 20)
[0, None, 1, None, None, 2, None, None, 3, None, 4, None, None, 5, None, None, 6, None, None, 7]
票数 8
EN

Stack Overflow用户

发布于 2012-10-21 03:42:54

如果你的第一个列表中有n次,第二个列表中有m个项目。像这样的东西会起作用的。

代码语言:javascript
复制
l2 = [None for I in range(m)]
for i, x in emumerate(l1):
    index = i * m / n
    l2[index] = l1[i]

你需要决定边缘情况的行为,如果m<n的话该怎么做,等等。

票数 4
EN

Stack Overflow用户

发布于 2012-10-21 08:07:09

这里有一个我认为很有趣的简洁的替代方案:

代码语言:javascript
复制
def stretch(seq, n):
    seq = [seq[i * (len(seq) - 1) // (n - 1)] for i in range(n)]
    return [seq[0]] + [x if x != y else None for x, y in zip(seq[1:], seq)]

基于此,基于itertools的版本不对列表进行任何复制,返回一个迭代器,您可以选择将该迭代器转换为列表:

代码语言:javascript
复制
from itertools import tee, chain, izip
def stretch(seq, n):
    s1, s2 = tee(seq[i * (len(seq) - 1) // (n - 1)] for i in range(n))
    return chain((next(s1),), (x if x != y else None for x, y in izip(s1, s2)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12991962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档