<p>我看到了两个问题。让我们看看您打印出来的<code>list</code>:</p>
<pre><code>[[(13506636000.0,)], [(20156784500.0,)], ... ]
</code></pre>
<p>它告诉我的是你有一个嵌套列表的列表(例如<code>[(13506636000.0,)]</code>)。这表示一行和一列,因为返回<code>c.fetchall()</code>。在本例中,您肯定知道最多返回1行数据,因此我们可以使用<code>c.fetchone()</code>来减少嵌套列表的数量。在</p>
<p>接下来,看看这一行:</p>
^{pr2}$
<p>由于<code>c.fetchone()</code>返回<code>(13506636000.0,)</code>,这是一个1元素的元组,因此可以使用以下技巧提取数字:</p>
<pre><code> (data,) = query_symbol(symbolId)
</code></pre>
<p>组合起来:</p>
<pre><code>def query_symbol(symbolId):
uniqueId = '{}@{}'.format(symbolId, datetime.date.today())
with sqlite3.connect('sql/database.db') as conn:
c = conn.execute(
"SELECT number FROM symbols WHERE uniqueId=?",
(uniqueId,))
return c.fetchone()
def calc(filename):
symbolIds = def_sec.load_symbolIds(filename)
print(len(symbolIds))
numbers = []
for symbolId in symbolIds:
(data, ) = query_symbol(symbolId) # instead of `data =`
numbers.append(data)
print(numbers)
total = sum(numbers)
print(total)
calc('index_symbolids')
</code></pre>
<p>在这一点上,你应该得到想要的结果。在</p>
<h2>更新</h2>
<p>此更新解释了<code>(data,) =</code>的工作原理。假设,如果您有一个由3个元素组成的元组,并且想要分配给变量<code>a</code>,<code>b</code>,<code>c</code>:</p>
<pre><code>(a, b, c) = (1, 2, 3) # a=1, b=2, c=3
</code></pre>
<p>实际上,我们可以从等号左边去掉括号:</p>
<pre><code>a, b, c = (1, 2, 3) # a=1, b=2, c=3
</code></pre>
<p>对于1元素元组,表示法是<code>(1,)</code>,而不是(1)(它只是<code>1</code>):</p>
<pre><code>data = (1,) # data = (1,), which is the whole tuple
(data,) = (1,) # data = 1, which is what we want
data, = (1,) # data = 1, but the syntax looks kind of wrong
</code></pre>
<p>回到您的问题,函数<code>query_symbol()</code>返回一个1元素元组,因此我们必须使用:</p>
<pre><code>(data,) = query_symbol(symbolId)
data, = query_symbol(symbolId)
</code></pre>
<p>我个人喜欢第一个语法,因为第二个语法看起来逗号是错误的。在</p>