打印列表时的括号

时间:2013-03-05 15:37:57

标签: python list tuples python-unicode

这不是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']

我不明白的两件事:

  1. 为什么第一个列表在打印时有'u'表示unicode,第二个列表没有?
  2. 为什么第一个列表在打印时有括号(u'koko',)而第二个没有?
  3. 第一个列表是元组列表吗?

3 个答案:

答案 0 :(得分:3)

列表中有括号,因为这就是python打印tuple的方式。

对比:

a = 'foo'
print a,type(a)

使用:

b = ('foo',)
print b,type(b)

另请注意,在python2.x中,有不同类型的字符串。 unicode只是一种字符串,python选择将其表示为u'whatever'

>>> print u'whatever'
whatever
>>> print repr(u'whatever')
u'whatever'

请注意str(tup)隐式调用元组中每个元素的repr

答案 1 :(得分:3)

[(u'koko',), (u'lolo',)]是unicode字符串的1元素元组列表。

["koko","lolo"]是一个字节字符串列表。

答案 2 :(得分:2)

您可能希望操纵结果以使其适应您想要的格式......

rows = cursor.fetchall()
result = [elem[0] for elem in rows]

...也许可以将函数应用于elem [0](取决于你的python版本),以便以你想要的格式输入字符串。