【发布时间】:2013-07-31 04:47:11
【问题描述】:
我创建了一行,通过以下方式将对象附加到列表中
>>> foo = list()
>>> def sum(a, b):
... c = a+b; return c
...
>>> bar_list = [9,8,7,6,5,4,3,2,1,0]
>>> [foo.append(sum(i,x)) for i, x in enumerate(bar_list)]
[None, None, None, None, None, None, None, None, None, None]
>>> foo
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
>>>
线
[foo.append(sum(i,x)) for i, x in enumerate(bar_list)]
会给 pylint W1060 表达式分配任何内容,但是由于我已经在使用 foo 列表来附加值,因此我不需要将列表理解行附加到某些东西上。
我的问题更多是关于编程正确性的问题
我应该放弃列表理解并只使用简单的 for 表达式吗?
>>> for i, x in enumerate(bar_list):
... foo.append(sum(i,x))
或者是否有正确的方法来使用列表理解和赋值?
回答
谢谢@user2387370、@kindall 和@Martijn Pieters。对于其余的 cmets,我使用 append 因为我没有使用 list(),我没有使用 i+x,因为这只是一个简化的示例。
我留下如下:
histogramsCtr = hist_impl.HistogramsContainer()
for index, tupl in enumerate(local_ranges_per_histogram_list):
histogramsCtr.append(doSubHistogramData(index, tupl))
return histogramsCtr
【问题讨论】:
-
我知道这只是一个例子,但为什么还要追加呢?为什么不只是
foo = [sum(i, x) ...]? -
sum(i, x)不起作用。你的意思是i + x? -
如果你真的想要一个 1-liner,你可以在一行上放一个
for循环。不过不推荐。
标签: python list-comprehension pylint code-complete