python - 如何在列表理解中执行多个操作

标签 python list operation

L = [random.randint(0,50) for i in range(5) random.randint(0,12) for i in range(2)]

我如何让它在 (0,50) 之间选择 5 个随机数,然后在 (0,12) 之间选择 2 个随机数?

最佳答案

您可以将第二个参数更改为 randint()基于 i 的值:

[randint(0, 50 if i < 5 else 12) for i in range(7)]

50 if i < 5 else 12表达式将改变传递给 random.randint() 的内容对于最后两次迭代。

您可以拼出更多变体。列表理解是一堆循环和 if重复执行前面表达式的过滤器。有很多方法可以拼写根据表达式中的迭代值改变函数调用的参数

例如,您可以将这些参数记录在 functools.partial() objects 中:

from functools import partial
from random import randint

rint50 = partial(randint, 0, 50)
rint12 = partial(randint, 0, 12)
[rint() for rint in [rint50] * 5 + [rint12] * 2]

可能性是无限的。 lambda 表达式,randint(0, upperbound) , randint(*args) ,一个会根据调用频率等而改变其结果的函数。但我不认为其中任何一个实际上更具可读性或可理解性。

对于这种情况,只有 7 个值,我只是连接两个列表:

[randint(0, 50) for _ in range(5)] + [randint(0, 12) for _ in range(2)]

因为它更简洁、更易读。创建包含两个列表理解结果的第三个列表的小性能成本在这里可以忽略不计。

关于python - 如何在列表理解中执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52670383/

相关文章:

python - 在 Google App Engine 上处理 db.Timeout

C# - 如何在列表中添加所有 system.drawing.color 项目?

c++ - 如何使用区分大小写的元素对 std::list 进行排序?

Python 创建范围 000 到 999

c# - 字符串的按位运算 - 1440 个字符长度

python - 带有 Pandas 的 ipython 中的自动完成功能似乎已损坏

python - 如何在Python中有效地检查第一个具有该概念的列表

c++ - 使用 C++ 模数运算符的票据面额

Python - Pandas - 减去索引列中的子列

Python:从列表中查找字符串中的子字符串,但保存子字符串