Как получить доступ к элементу очереди на основе индекса - PullRequest
1 голос
/ 30 апреля 2019

У меня есть очередь

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 ]

1 голос
/ 30 апреля 2019

Вы можете сделать следующее:

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_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]
1 голос
/ 30 апреля 2019

Вы можете изменить свою функцию, чтобы использовать понимание списка следующим образом:

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

В этом случае это должно быть более эффективным, если вы уверены, что очередь не меняется после iterQueВы можете вернуть генератор вместо списка, просто измените [n[index] for n in que] на (n[index] for n in que).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...