Циклический просмотр списка одноэлементных кортежей дает другой результат, чем циклический просмотр многоэлементных кортежей - PullRequest
0 голосов
/ 12 октября 2018

У меня есть sqlite запросы, которые выводят списки кортежей.Я сталкиваюсь с ситуацией, когда не понимаю, почему циклический просмотр списка одноэлементных кортежей дает другой результат по сравнению с циклическим просмотром списка многоэлементных кортежей.В качестве примера возьмем следующие списки:

list1 = [('value1',),('value2',)]
list2 = [('value1', 'value1'), ('value2', 'value2')]

Когда я повторяю первый запрос:

for item1 in list1:
    print(item1)

Я получаю следующее:

('value1',)
('value2',)

Принимая во внимание, когдаЯ перебираю второй запрос:

for item1, item2 in list2:
    print(item1, item2)

Я получаю следующее:

value1 value1
value2 value2

Так почему разница в выводе при циклическом просмотре списка одноэлементных кортежей и многоэлементныхкортежи?Есть ли другой способ построения цикла, чтобы мне не приходилось по-другому обрабатывать вывод?Прямо сейчас всякий раз, когда я перебираю список одноэлементных кортежей, мне нужно создать оператор print следующим образом:

for item1 in query1:
    print(item1[0])

Я думаю, просто странно, что Python по-разному обрабатывает эти два метода.разбирает списки.Другими словами, почему он не выводит второй цикл следующим образом:

('value1', 'value1')
('value2', 'value2')

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы не сравниваете яблоко с яблоком.

In [8]: for item in list1:
   ...:     print(item)

('value1',)
('value2',)

In [9]: for item in list2:
   ...:     print(item)

('value1', 'value1')
('value2', 'value2')

В вашем вопросе вы ожидаете, что два по-разному распакованных цикла будут вести себя одинаково.

0 голосов
/ 12 октября 2018

Вы должны циклически перебирать кортежи из 1 предмета, распаковывая кортеж точно так же, как вы делаете это с кортежами из 2 предметов (обратите внимание на запятую):

for item1, in list1:
    print(item1)
...