python - 遍历单元素元组列表产生的结果与遍历多元素元组不同
问题描述
我有输出元组列表的 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')
解决方案
您应该通过解包元组来循环遍历 1 项元组,就像使用 2 项元组一样(注意逗号):
for item1, in list1:
print(item1)
推荐阅读
- ios - AppDelegate applicationDidEnterBackground 在模拟器上工作但不在设备上
- bash - 试图找到 shell 命令以从文件中删除 2 个文件之间的公共行
- wxwidgets - wxHtmlWindow LoadFile 不在 wxFrame 中显示
- ruby-on-rails - 如何在rails(postgres)查询中参数化日期范围?
- jquery - Jquery ajax webmethod vs webservice webmethod?
- ios - 使用 UISearchController 将 UISegmentedControl 放在 NavigationBar 中的标题下方
- angular - Angular 全局错误处理 - 指定发生错误的模块
- javascript - 如何在javascript中将数组的元素增加所需的值?
- ios - Firebase 错误:必须在使用 FIRDatabase 实例之前调用 setPersistenceEnabled
- python-3.x - Python内存地址