已经存在关于checking whether an object is iterable的问题,但有时我需要了解可迭代对象的外观。例如,我在SO上发现我可以执行以下操作:
sqlite_cursor.execute('SELECT * FROM mytable')
csv_writer.writerows(sqlite_cursor)
这有效,但是我无法理解如何在不偷看db_cursor
对象的情况下自己想出这个解决方案,以确定它是否是列表列表(这样我就可以给{{1 }})。
我如何偷看这样的物体?
答案 0 :(得分:1)
如果我想在python的迭代中达到峰值,那么这就是我使用的习语:
import itertools
peek = iterable.next()
iterable = itertools.chain([peek], iterable)
你可以像这样制作一个函数:
def peek(iterable):
peek = iterable.next()
return peek, itertools.chain([peek], iterable)
使用是这样的:
iterable = iter([1,2,3])
peek, iterable = peek(iterable)
print "peek: %s" % peek
print "iterable: %s " % list(iterable)
输出:
peek: 1
iterable: [1, 2, 3]