打印列表时的括号问题
这不是专门针对sqlite的内容,但我在学习python和sqlite3时,想到了一个问题,关于查询结果的显示。我有一段简单的代码:
connection = sqlite3.connect("db.sqlite")
cursor = connection.cursor()
cursor.execute("select * from db")
print cursor.fetchall()
所以,print cursor.fetchall()
的结果是:[(u'koko',), (u'lolo',)]
。但是,当我尝试用这段代码重新打印时:
i=["koko","lolo"]
print i
打印的结果是:['koko', 'lolo']
我有两个地方不太明白:
- 为什么第一个列表的元素前面有个'u'表示unicode,而第二个没有?
- 为什么第一个列表的元素有括号
(u'koko',)
,而第二个没有?
第一个列表是不是一个元组的列表呢?
3 个回答
2
你可能想要对结果进行一些处理,以便让它符合你想要的格式...
rows = cursor.fetchall()
result = [elem[0] for elem in rows]
...而且可能需要对elem[0]应用一个函数(这取决于你使用的Python版本),这样可以把字符串转换成你想要的格式。
3
这个列表有括号是因为在Python中,打印一个tuple
(元组)就是这个样子。
对比一下:
a = 'foo'
print a,type(a)
和:
b = ('foo',)
print b,type(b)
另外要注意,在Python 2.x版本中,有不同类型的字符串。unicode
就是一种字符串类型,Python选择用u'whatever'
的方式来表示它:
>>> print u'whatever'
whatever
>>> print repr(u'whatever')
u'whatever'
要记住,str(tup)
会自动对元组中的每个元素调用repr
。
3
[(u'koko',), (u'lolo',)]
是一个包含单个元素的元组的列表,每个元素都是unicode字符串。
["koko","lolo"]
是一个包含字节字符串的列表。