任务:{x * y使得x属于S& y是迭代计数} 其中S是其他一组 像这样的东西:
j=0
[i*j for j++ and i in S]
[s1*1, s2*2, s3*3...]
答案 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))
这将允许您一次处理一个结果,并且永远不会将整个列表存储在内存中。您可以将生成器表达式传递给sum
,max
,min
以及大多数其他内置函数。
答案 1 :(得分:1)
S = range(40,100)
[i*j for i,j in enumerate(S)]
答案 2 :(得分:1)
执行此操作的一种方法是将enumerate
与range
结合使用:
[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