如何用列表值清除和替换双端队列的值?
How do I clear and replace values of a deque with list values?
假设我有一个包含六个项目的列表
app = [6, 4, 6, 22, 255, 33]
但我想将这些数字传递给参数 - 但一次只能传递 3 个数字
我该怎么做?
现在我正在使用具有最大限制的双端队列,但我不知道如何用下一组交换值。
您可以使用 python 个切片。在浏览器中编写的代码,未经测试
它确实创建了一个新数组,但它是一个小数组
for i in range(len(app)-3):
slice = app[i:i+3]
myfun(slice[0], slice[1], slice[2])
可以使用Python的子数组表示法。例如。 app[:3]
表示前三个元素,或者app[1:4]
(=[4, 6, 22]
)表示第二到第四个元素。
如果您的函数需要三个参数,您可以使用 *
运算符传递它们:
def f(a, b, c):
...
f(*app[:3])
带循环的解决方案:
app = [6, 4, 6, 22, 255, 33]
for i in range(0, len(app), 3):
print(app[i], app[i+1], app[i+2])
带 zip 的解决方案:
app = [6, 4, 6, 22, 255, 33]
for (i, j, q) in zip(app[::3], app[1::3], app[2::3]):
print(i, j, q)
更通用的解决方案。 Grouper
来自 itertools recipes:
from itertools import izip_longest
app = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14]
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
for i, j, q, r in grouper(app, 4):
print(i, j, q, r)
假设我有一个包含六个项目的列表
app = [6, 4, 6, 22, 255, 33]
但我想将这些数字传递给参数 - 但一次只能传递 3 个数字
我该怎么做?
现在我正在使用具有最大限制的双端队列,但我不知道如何用下一组交换值。
您可以使用 python 个切片。在浏览器中编写的代码,未经测试
它确实创建了一个新数组,但它是一个小数组
for i in range(len(app)-3):
slice = app[i:i+3]
myfun(slice[0], slice[1], slice[2])
可以使用Python的子数组表示法。例如。 app[:3]
表示前三个元素,或者app[1:4]
(=[4, 6, 22]
)表示第二到第四个元素。
如果您的函数需要三个参数,您可以使用 *
运算符传递它们:
def f(a, b, c):
...
f(*app[:3])
带循环的解决方案:
app = [6, 4, 6, 22, 255, 33]
for i in range(0, len(app), 3):
print(app[i], app[i+1], app[i+2])
带 zip 的解决方案:
app = [6, 4, 6, 22, 255, 33]
for (i, j, q) in zip(app[::3], app[1::3], app[2::3]):
print(i, j, q)
更通用的解决方案。 Grouper
来自 itertools recipes:
from itertools import izip_longest
app = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14]
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
for i, j, q, r in grouper(app, 4):
print(i, j, q, r)