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

发布于 2024-09-25 05:17:57 字数 152 浏览 4 评论 0原文

任务:{x*y,使得x属于S& y 是迭代次数 } 其中 S 是其他集合 像这样的:

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

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

task: {x*y such that x belongs to S & y is iteration count }
where S is some other set
something like this:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

你列表最软的妹 2024-10-02 05:17:57

对于您编辑的问题,您希望

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


for your edited question, you want

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

python doesn't have ++ because it keeps a clear distinction between statements and expressions. use

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

another way to do this is

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

and yet another way is

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

I think that the first is the best way to do it because it reduces function calls and is the most readable.

Also, if you don't know that you absolutely need a list, use a generator expression

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

This will allow you to process the results one at a time and never store a whole list in memory. You can pass a generator expression to stuff like sum, max, min and most other builtins.

混吃等死 2024-10-02 05:17:57

一种方法是使用 enumeraterange 结合使用:

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

查看其他答案(很多)其他方法可以做到这一点:) :)

One way to do this would be to use enumerate in conjunction with range:

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

Look at other answers for (a lot of) other ways to do this :) :)

清秋悲枫 2024-10-02 05:17:57

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

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

I'd do it in a generator:

def fooGen(S):
    j = 1
    for i in S:
        yield i * j
        J += 1
篱下浅笙歌 2024-10-02 05:17:57
S = range(40,100)
[i*j for i,j in enumerate(S)]
S = range(40,100)
[i*j for i,j in enumerate(S)]
再浓的妆也掩不了殇 2024-10-02 05:17:57

“”“
任务:{x*y,使得x属于S& y 是迭代次数 } 其中 S 是其他集合
[剪掉 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)]

"""
task: {x*y such that x belongs to S & y is iteration count } where S is some other set
[snip unfortunate introduction of i and j]
[s1*1, s2*2, s3*3...]
"""

a very simple translation:

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

or

[x * (y + 1) for y, x in enumerate(S)]
揪着可爱 2024-10-02 05:17:57

您可以使用当前元素索引作为增量器,

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

you can use the current element index as an incrementor

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

so your c-ish "j++" is S.index(i)+1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文