2014-11-06 51 views
0

我有這樣的事情(在我的IPython的筆記本,像NumPy這樣沒有特殊的命名空間包括 - 要這樣呢?):迭代在二維數組和分配在線(Python和IPython中)

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()轉換)

回答

1

Python可以多次賦值,並在一個循環中提取。

​​

如果您覺得字符串部分缺乏優雅,有幾種方法可以解決這個問題。首先 - 您總是可以使用str(item_id)來獲取字符串。

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

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

最後要注意的 - 蟒蛇約定建議爲變量名小寫(使用大寫,如果你打算使用它作爲一個常量的值)。小寫的「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] 

你現在有這些語句的數組打印,或使用其他地方。