Пустой курсор для итерации с использованием zip - PullRequest
0 голосов
/ 02 августа 2020

У меня есть несколько курсоров для итерации, но когда один из них пуст, zip не работает. Как я могу перебирать другие списки, когда один из них пуст. Пример кода выглядит следующим образом:

    for x, y, p, q in zip(cursor_X, cursor_Y,
                              cursor_P, cursor_Q):
    data1 = x
    data2 = y
    data3 = p
    data4 = q
print(str(data1['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']), end="")
print("\t" + str(data2['data']))

1 Ответ

3 голосов
/ 02 августа 2020

Вы можете использовать itertools.zip_longest :

itertools.zip_longest (* iterables, fillvalue = None)

Создайте итератор, который объединяет элементы из каждого итераций. Если итерируемые элементы имеют неравную длину, отсутствующие значения заполняются значением fillvalue. Итерация продолжается до тех пор, пока не будет исчерпана самая длинная итерация

Вы не показали, как выглядят ваши данные, но для того, чтобы остальная часть вашего кода работала, вы можете использовать dict с 'data' ключ и пустая строка в качестве значения для отсутствующих данных:

from itertools import zip_longest

for x, y, p, q in zip_longest(cursor_X, cursor_Y,
                              cursor_P, cursor_Q,
                              fillvalue={'data':''}):
    data1 = x
    data2 = y
    data3 = p
    data4 = q

    print(str(data1['data']), end="")
    print("\t" + str(data2['data']), end="")
    print("\t" + str(data2['data']), end="")
    print("\t" + str(data2['data']))

Обратите внимание, что вы можете переписать содержимое l oop без ненужных промежуточных переменных:

for x, y, p, q in zip_longest(cursor_X, cursor_Y, cursor_P, cursor_Q,
                              fillvalue={'data':''}):    
    out = '\t'.join(map(str, (x, y, z, t)))
    print(out)

или даже:

for items in zip_longest(cursor_X, cursor_Y, cursor_P, cursor_Q,
                         fillvalue={'data':''}):    
    out = '\t'.join(map(str, items))
    print(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...