【问题标题】:parentheses when printing list打印列表时的括号
【发布时间】:2013-02-20 02:17:27
【问题描述】:

这不是特定于 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',) 而第二个没有?

第一个列表可能是元组列表吗?

【问题讨论】:

    标签: python list tuples python-unicode


    【解决方案1】:

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

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

    ...也许将函数应用于 elem[0](取决于您的 python 版本)以将字符串以您想要的格式放置。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • @cikatomo 您可以使用 u'some string' 作为文字或使用内置的 unicode() 使字符串成为 unicode 文字。或者,使用默认情况下所有字符串都是 Unicode 的 Python 3.x。值得注意的是,一般来说,unicode 字符串和字节字符串可以在任何其他可以工作的地方工作(除了在少数情况下,或者自然而然需要 unicode 字符的地方)。
      • 如果你想做同样的事情,为什么不直接复制呢?这正是它的样子。
      • repr(x) 的要点是,如果将结果字符串粘贴到代码中,它应该会生成x。 (给定正确的导入和正确实现repr() 的类)。
      【解决方案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

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多