打印列表时的括号问题

1 投票
3 回答
1925 浏览
提问于 2025-04-17 18:01

这不是专门针对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 个回答

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"] 是一个包含字节字符串的列表。

撰写回答