sqlite3 select ステートメントの結果としてタプルの iterable を取得しています。文字列の iterable を期待する関数に、この iterable を与えたいと考えています。次の関数をオーバーライドして、タプルの最初のインデックスを取得するにはどうすればよいですか? または、より正確に言うと、これを行う正しいpythonicの方法は何ですか?
>>> res = conn.execute(query,(font,))
>>> train_counts = count_vect.fit_transform(res)
AttributeError: 'tuple' object has no attribute 'lower'
編集:
マッピングにはリスト全体の反復が含まれるため、Niklas が提供したジェネレーターを構築するだけの場合の 2 倍の時間がかかります。
first = """
l = list()
for i in xrange(10):
l.append((i,))
for j in (i[0] for i in l):
j
"""
second = """
l = list()
for i in xrange(10):
l.append((i,))
convert_to_string = lambda t: "%d" % t
strings = map(convert_to_string, l)
for j in strings:
j
"""
third = """
l = list()
for i in xrange(10):
l.append((i,))
strings = [t[0] for t in l]
for j in strings:
j
"""
print "Niklas B. %f" % timeit.Timer(first).timeit()
print "Richard Fearn %f" % timeit.Timer(second).timeit()
print "Richard Fearn #2 %f" % timeit.Timer(third).timeit()
>>>
Niklas B. 4.744230
Richard Fearn 12.016272
Richard Fearn #2 12.041094