如何基于索引访问队列元素

时间:2019-04-30 08:50:25

标签: python performance

我有一个队列

from collections import deque
queue = deque([(1, 2), (5, 7), (3, 9)])

并给出索引。

我的功能如下:

def iterQue(que, index):
    data = []
    for d in que:
        data.append(d[index])
    return data

输出:

index = 0, get [1, 5, 3]

index = 1, get [2, 7, 9]

有没有更好的方法来修改我的功能?

2 个答案:

答案 0 :(得分:1)

您可以将函数更改为使用列表理解,例如:

def iterQue(que, index):
    return [n[index] for n in que]

在这种情况下,它应该更有效,如果您确定在iterQue调用之后队列没有改变,则可以返回生成器而不是列表,只需将[n[index] for n in que]更改为{ {1}}。

答案 1 :(得分:1)

您可以执行以下操作:

from collections import deque
queue = deque([(1, 2), (5, 7), (3, 9)])

li = [[] for _ in range(2)]

for item in queue:
    for i in range(2):
        li[i].append(item[i])

print(li)

for idx, item in enumerate(li):
    print('index = {}, get {}'.format(idx, item))

或者如以下Tobias的评论所建议(感谢@tobias_k)

from collections import deque
queue = deque([(1, 2), (5, 7), (3, 9)])

li = [ list(item) for item in zip(*queue)]
print(li)

for idx, item in enumerate(li):
    print('index = {}, get {}'.format(idx, item))

在两种情况下输出都将如下所示

[[1, 5, 3], [2, 7, 9]]

index = 0, get [1, 5, 3]
index = 1, get [2, 7, 9]