Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于这种列表理解,什么是正确的python语法?_Python_List Comprehension - Fatal编程技术网

对于这种列表理解,什么是正确的python语法?

对于这种列表理解,什么是正确的python语法?,python,list-comprehension,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…] 对于已编辑的问题,您需要 [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)

任务:{x*y,使得x属于S&y是迭代计数} S是另一组吗 大概是这样的:

j=0
[i*j for j++ and i in S]
[s1*1、s2*2、s3*3…]

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

[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
和大多数其他内置函数。

一种方法是与以下函数结合使用:

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

查看其他答案,了解(许多)实现此目的的其他方法:):)

我会在生成器中实现:

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

任务:{x*y,因此x属于S&y是迭代计数},其中S是另一个集合
[剪下i和j的介绍]
[s1*1、s2*2、s3*3…]
“”“

一个非常简单的翻译:

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


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

>>> 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

你必须更完整地解释你想要什么,因为你描述的是一个40*j的无限序列,我们根本不需要担心范围。当我第一次回答这个问题时,
S
range(40100)
。当循环一个序列时,可以使用enumerate()函数src同时检索位置索引和相应的值:
start
参数用于
enumerate()
,因此您可以使用
enumerate(S,start=1)
。@Aaron:对。在他的第一个例子中(删除后),他从1开始,把我扔到了那里@肯尼特:谢谢,这样更好(如果需要的话)。但是OP的索引是从0开始的,而不是从1开始。@Aaron:你叫什么“索引”,y(迭代计数)?看看他的最后一行:[s1*1,s2*2,s3*3…]。。。我看不到zero.OP有
j
从0开始,而生成器函数对于生成器表达式所能做的事情来说是过度杀戮。-1这真是令人难以置信的混乱
index
遍历列表以查找
i
的索引,因此您只进行了一个O(n)操作,并将其转换为一个O(n**2)操作!另外,试一下
S=[2,3,3,3,4]
问题是关于使用列表理解,也不是“快速实现”或“美丽实现”1)这只是蹩脚代码的(蹩脚)借口,2)你的蹩脚代码甚至不起作用。你的O(n):[S[i]*(i+1)代表范围内的i(0,len(S))]
[x * (y + 1) for y, x in enumerate(S)]
>>> S=[2,4,6,8]
>>> [i*(S.index(i)+1) for i in S]
[2, 8, 18, 32]
>>>