遍历单元素元组列表产生的结果与遍历多元素元组的结果不同

时间:2018-10-12 03:51:32

标签: python list loops sqlite tuples

我有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

那么为什么在遍历单元素元组与多元素元组的列表时输出的差异呢?有没有其他构建循环的方式,这样我就不必以不同的方式处理输出了?现在,每当我遍历单元素元组的列表时,我都需要构建如下打印语句:

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

我想Python在解析列表方面以不同的方式处理这两者似乎很奇怪。换句话说,为什么它不这样输出第二个循环:

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

2 个答案:

答案 0 :(得分:1)

您应该通过拆开元组的包装来遍历1项元组,就像处理2项元组一样(请注意逗号):

for item1, in list1:
    print(item1)

答案 1 :(得分:1)

您不是在将苹果与苹果进行比较。

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

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

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

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

在您的问题中,您期望两个不同的解压缩循环表现相同。