抱歉,我刚刚找到了
id = [conn.cursor()for x in range(100)]
也有效,所以我的担心不再是问题。 谢谢你的所有回答,你们所有人都非常快。
全部,
id = [(conn.cursor(),x) for x in range(100) ]
>>> id
[(<sqlite3.Cursor object at 0x01D14DA0>, 0), (<sqlite3.Cursor object at 0x01D14DD0>, 1), (<sqlite3.Cursor object at 0x01D14E00>, 2), (<sqlite3.Cursor object at 0x01D14E30>, 3), (<sqlite3.Cursor object at 0x01D14EC0>, 4), (<sqlite3.Cursor object at 0x01D14EF0>, 5), <omitted>
但实际上我不需要id [1] col,我不想使用
for x in range(100):
id.append(conn.cursor())
出于某种原因,你认为我可以使用列表理解来获得我想要的东西吗? 还有类似的问题,如果我想调用一个函数100次。
def foo():
pass
for x in range(100):
foo()
是否可以将“for”重写为列表推导风格?
谢谢!
答案 0 :(得分:1)
1
cursors = [ conn.cursor() for _ in xrange(100) ]
2
results = [ foo() for _ in xrange(100) ]
答案 1 :(得分:1)
关于第二个问题
列表推导用于生成另一个列表作为其他列表或列表的迭代输出。因为你想运行foo一次,所以在范围(..)循环中使用它会更优雅,更少混淆。
如果你有兴趣整理foo的返回值,那么你应该使用list comprehension else for循环是好的。至少我会这样写。
请参阅以下示例:
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def foo(): print 'foo'
...
>>>
>>> [foo() for x in range(10)]
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
[None, None, None, None, None, None, None, None, None, None]
>>>
[编辑:根据要求]
eumiro提供的iter版本。
>>> results = ( foo() for _ in xrange(10) )
>>> results
<generator object <genexpr> at 0x10041f960>
>>> list(results)
foo
foo
foo
foo
foo
foo
foo
foo
foo
foo
[None, None, None, None, None, None, None, None, None, None]
>>>
答案 2 :(得分:1)
您不必在列表迭代中使用要迭代的变量。这样可以正常工作:
id = [conn.cursor() for _ in range(100)]