使用Zip()进行循环,选择要打印的记录数

时间:2019-04-01 13:12:22

标签: python python-3.x

我有一个正常工作的代码,但是它仅从entrada中选择4个值。我希望能够为每个参数设置此金额。

def pdd(number, entrada):
    for i, j, k, l, m in zip(entrada[:-1], entrada[1:], entrada[2:], entrada[3:], entrada[4:]):
        if number in i:
            print([j, k, l, m])

list_pad = [[1, 9], [1, 15], [1, 10], [1, 11], [1, 12], [1, 13], [1, 15], [1, 14], [1, 15], [1, 16], [1, 17], [1, 18]]

pdd(15, list_pad)

输出:

[[1, 10], [1, 11], [1, 12], [1, 13]]
[[1, 14], [1, 15], [1, 16], [1, 17]]

基本上它将解析输入,在这种情况下,它是一个包含小列表的列表。然后,它分析输入,并通过标识具有number参数传递的数字的项目(列表),将打印接下来的4个项目(列表)。这段代码已经完成了,但是我希望能够通过传递给函数的参数(而不是4)来设置数量

但是我希望不设置4条记录,而是希望能够为每个参数设置数量。

示例:

pdd(15, list_pad, 6)

并应离开:

[[1, 10], [1, 11], [1, 12], [1, 13], [1, 15], [1, 14]]

示例2:

pdd(15, list_pad, 2)

并应离开:

[[1, 10], [1, 11]]
[[1, 14], [1, 15]]
[[1, 16], [1, 17]]

该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用生成器表达式来对entrada范围内的n进行迭代和切片,新参数指定输出记录的数量,并将其输出解压缩为zip的参数。 :

def pdd(number, entrada, n):
    for i, *j in zip(entrada, *(entrada[i:] for i in range(1, n + 1))):
        if number in i:
            print(j)

答案 1 :(得分:1)

这可能更简单:

def pdd(num,data,len):
    for i,v in enumerate(data[:-len]):
        if num in v:
            print(data[i+1:i+len+1])