这种列表理解的python语法是什么?

时间:2010-09-27 09:47:58

标签: python list-comprehension

任务:{x * y使得x属于S& y是迭代计数} 其中S是其他一组 像这样的东西:

j=0
[i*j for j++ and i in S]

[s1*1, s2*2, s3*3...]

6 个答案:

答案 0 :(得分:4)


对于您编辑过的问题,您需要

[i * j for j, i in enumerate(S)]

python没有++,因为它在语句和表达式之间有明确的区别。使用

[(i + 40) * i for i in xrange(60)]

另一种方法是

[i * j for i, j in enumerate(xrange(60), start=40)]

另一种方式是

[i * j for i, j in zip(xrange(40, 100), xrange(60))]

我认为第一种方法是最好的方法,因为它减少了函数调用并且是最易读的。

另外,如果您不知道绝对需要列表,请使用生成器表达式

((i + 40) * i for i in xrange(60))

这将允许您一次处理一个结果,并且永远不会将整个列表存储在内存中。您可以将生成器表达式传递给summaxmin以及大多数其他内置函数。

答案 1 :(得分:1)

S = range(40,100)
[i*j for i,j in enumerate(S)]

答案 2 :(得分:1)

执行此操作的一种方法是将enumeraterange结合使用:

[x * (count + 1) for count, x in enumerate(range(40, 100))]

查看(很多)其他方法的其他答案:):)

答案 3 :(得分:1)

我会在发电机中做到这一点:

def fooGen(S):
    j = 1
    for i in S:
        yield i * j
        J += 1

答案 4 :(得分:0)

“”“
任务:{x * y使x属于S& y是迭代计数}其中S是其他一组 [sn不幸介绍i和j]
[s1 * 1,s2 * 2,s3 * 3 ......]
“”“

一个非常简单的翻译:

[x * y for y, x in enumerate(S, start=1)]

[x * (y + 1) for y, x in enumerate(S)]

答案 5 :(得分:0)

您可以将当前元素索引用作增量函数

>>> S=[2,4,6,8]
>>> [i*(S.index(i)+1) for i in S]
[2, 8, 18, 32]
>>> 

所以你的c-ish“j ++”是S.index(i)+1