1

ここに私が持っているいくつかのコードがありますが、これは本当に醜いものです。誰かがそれを改善する方法を教えてくれることを願っています。私は漠然とこのコードを修正する方法を知っていますが、実際に動作するように改善することはできません.

list1 = ([1, 10])
array2 = numpy.ones((1,3))
array3=numpy.ones((1,2))

conn = sqlite3.connect("a.db")
c = conn.cursor()
c.execute("insert into a_table values(?, ? , ?, ?, ?, ?, ?)", (list1[0], list1[1], array2[0][0], array2[0][1], array2[0][2], array3[0][0], array3[0][1]))
#

私がする必要があると思うのは、list1、array2、および array3 をリストに追加してから、何らかの方法で平坦化することです。そして、どういうわけか1つのコマンドでリスト全体をテーブルにアンパックします...ありがとう!!

4

4 に答える 4

4

ravelを使用しarray2array31 次元を作成できます。

In [149]: import itertools

In [150]: list(itertools.chain(list1, array2.ravel(), array3.ravel()))
Out[150]: [1, 10, 0, 1, 2, 0, 1]
于 2012-09-20T16:04:08.510 に答える
2

配列を 1 次元のリストにキャストして、新しいリストを作成しました。

c.execute("insert into a_table values(?, ? , ?, ?, ?, ?, ?)", 
    list1 + list(array2[0]) + list(array3[0]))            

または、.ravel()1 次元配列を作成するために使用できます。

c.execute("insert into a_table values(?, ? , ?, ?, ?, ?, ?)", 
    list1 + list(array2.ravel()) + list(array3.ravel()))            

パラメーターの数が可変の場合は、プレースホルダー パラメーターも生成できます。

from itertools import chain
params = list(chain(list1, array2.ravel(), array3.ravel()))

c.execute("insert into a_table values(%s)" % (', '.join(('?',) * len(params),),
    params)
于 2012-09-20T15:56:13.390 に答える
0

これをループで実行していない場合、 itertools.chain() は何も得られないと思います。入力に基づいた簡単なものを次に示します。

list1=([1,10])
array2 = numpy.ones((1,3))
array3 = numpy.ones((1,2))

args=list1 + list(*array2) + list(*array3)
# [1, 10, 1.0, 1.0, 1.0, 1.0, 1.0]
conn = sqlite3.connect("a.db")
c = conn.cursor()
c.execute("insert into a_table values(?, ? , ?, ?, ?, ?, ?)",*args)
于 2012-09-20T16:41:20.597 に答える
0
>>> from itertools import chain
>>> master_l = list(array2)+list(array3)
>>> list1.extend(chain(*master_l)
... )
>>> list1
[1, 10, 1.0, 1.0, 1.0, 1.0, 1.0]

>>> c.execute("insert into a_table values(?, ? , ?, ?, ?, ?, ?)",list1)
于 2012-09-20T16:02:04.477 に答える