【问题标题】:iteration over a twodimensional tuple and assigning inline (Python, iPython)迭代二维元组并分配内联(Python,iPython)
【发布时间】:2014-11-06 11:11:58
【问题描述】:

我有类似的东西(在我的 iPython 笔记本中,没有像 numpy 这样的特殊命名空间 - 我应该吗?):

map1 = (("A",1,2),("B",4,5),("C",0,0))

print len(map1)

for i in range(len(map1)):
    name = map1[i][0]
    ID = map1[i][1]
    parent_ID = map1[i][2]
    print name, ID, parent_ID
    statement= "INSERT INTO map VALUES (" + name + "," + `ID` + "," + `parent_ID` + ")"
    print statement

我正在寻找一种更优雅的方式来将单元组元素提取为 oneliner 或 inliner。 (我花了足够长的时间才弄清楚“`”做了toString()转换)

【问题讨论】:

    标签: sql loops for-loop tuples ipython


    【解决方案1】:

    Python 可以在一个循环中进行多重赋值和提取。

    for name, item_id, parent_id in map1:
      print name, item_id, parent_id
      statement= "INSERT INTO map VALUES (" + name + "," + `item_id` + "," + `parent_id` + ")"
      print statement
    

    如果你觉得弦乐部分缺乏优雅,有几种方法可以解决这个问题。首先 - 你总是可以使用str(item_id) 来获取一个字符串。

    你也可以使用字符串格式:

      statement= "INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id)
    

    最后一点 - python 约定建议变量名小写(如果您打算将其用作 const 值,请使用大写)。小写的名称“id”是内置的 - 不要使用它,因此item_id

    for name, item_id, parent_id in map1:
      print name, item_id, parent_id
      statement= "INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id)
      print statement
    

    您甚至可以更进一步,使用列表推导式在一行中完成所有操作:

    statements = ["INSERT INTO map VALUES (%s, %d, %d)" % (name, item_id, parent_id) for name, item_id, parent_id in map1]
    

    您现在可以打印这些语句的数组,或在其他地方使用。

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 2011-12-28
      • 2015-04-04
      • 2020-06-09
      • 2019-12-24
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多