如何使块可重复?

时间:2019-06-06 08:18:57

标签: python

我有一个函数,使用一个名称列表并读取确定的补丁编号(n),我正在使用yield,我的问题是,当yield完成时,最后一个补丁的大小与其他补丁。我想做的是在第一个补丁中添加第一个补丁中的某些元素(以便我重复),以便所有补丁的大小相同。

first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack','Bob', 'Bily', 'Boni', 'Chris','Sori', 'Will', 'Won','Li']

def chunks(l, n):
    # For item i in a range that is a length of l,
    for i in range(0, len(l), n):
        # Create an index range for l of n items:
        yield l[i:i+n]

list(chunks(first_names, 5))

如果使用上面的调用,则最后一个补丁将仅包含3个名称,我要做的是将其复制“ steve”和“ Jane”,并以5个名称作为其他2个名称补丁。

2 个答案:

答案 0 :(得分:2)

一种快速的方法是将n个项目添加到用于收益的列表的末尾:

first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack','Bob', 'Bily', 'Boni', 'Chris','Sori', 'Will', 'Won','Li']

def chunks(l, n):

    m = l + l[:n]

    # For item i in a range that is a length of l,
    for i in range(0, len(l), n):
        # Create an index range for the longer m list of n items:
        yield m[i:i+n]

print(list(chunks(first_names, 5)))

输出:

[['Steve', 'Jane', 'Sara', 'Mary', 'Jack'], ['Bob', 'Bily', 'Boni', 'Chris', 'Sori'], ['Will', 'Won', 'Li', 'Steve', 'Jane']]

答案 1 :(得分:0)

那又怎么样呢?

first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack','Bob', 'Bily', 'Boni', 'Chris','Sori', 'Will', 'Won','Li']

def chunks(l, n):
    # For item i in a range that is a length of l,
    for i in range(0, len(l), n):
        # Create an index range for l of n items:
        c = l[i:i+n]
        if len(c) < n:
            c += l[:(n - len(c))]
        yield c

list(chunks(first_names, 5))