python - Python:循环可变数量的输入
问题描述
当可迭代的数量根据用户输入而变化时,有没有办法有效地将可变数量的输入输入到像 itertools.product() 这样的程序中?
例如,下面的代码运行,但需要为每个循环显式定义:
steps = np.linspace(0,100,21)
if len(elem_list) == 2:
for phase in itertools.product(steps,steps):
if round(round(phase[0],10)+round(phase[1],10),10)==100:
print(phase)
if len(elem_list) == 3:
for phase in itertools.product(steps,steps,steps):
if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10),10)==100:
print(phase)
if len(elem_list) == 4:
for phase in itertools.product(steps,steps,steps,steps):
if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10)+round(phase[3],10),10)==100:
print(phase)
if len(elem_list) == 5:
for phase in itertools.product(steps,steps,steps,steps,steps):
if round(round(phase[0],10)+round(phase[1],10)+round(phase[2],10)+round(phase[3],10)+round(phase[4],10),10)==100:
print(phase)
其中 elem_list 包含用户输入的可变数量的元素。
有什么方法可以更简洁地编写它,因此它通常可以应用于任何长度的 elem_list?谢谢!
解决方案
itertools.product
repeat
完全为此接受一个论点。sum
与和一起使用map
。
我不确定您为什么需要round
(或round(..., 10)
就此而言),因为steps
包括整数(因此将它们相加可以保证给出一个整数),但这是要走的路。
steps = np.linspace(0, 100, 21)
for phase in itertools.product(steps, repeat=len(elem_list)):
if sum(map(round, phase)) == 100:
print(phase)
推荐阅读
- r - 网页从同一个标签中抓取不同的名字
- react-native - 动态响应本机更改抽屉标签
- python - 带有超出范围的 plt 注释的 Jupyter matplotlib 内联模式
- java - 如何镜像Android的屏幕?
- vba - 记录集数据未填充到 txt 字段中
- angular - 间谍服务的行为不符合预期
- javascript - 如何通过某个经度和纬度内的半径限制 Google Places 自动填充 API?
- tableau-api - 如何设置 Tableau 数据提取刷新
- php - 更正 HTML 和 Joomla 中错误生成的 href 链接
- qt - 使用 cmake 构建 Qt 项目