python - 这种方式有更短的方法吗?
问题描述
假设我有变量 a、b、c、d、e、f .. 每次 6 个变量中的 2 个随机具有值 = 0。所以我的代码是这样的
if(a == 0 and b == 0):
run c,d,e,f
elif(a == 0 and c == 0):
run b,d,e,f
...
...
continue until end of all combination
所以编码会很长,还有其他方法吗?
解决方案
您可以将所有数字放入一个列表中,然后将该列表的列表组合提供给run
函数 - 忽略 0 的元素:
def run(p1,p2,p3,p4):
print(p1,p2,p3,p4)
# 3 test cases
for d in [ [ 1,2,0,3,4,0], [0,0,2,3,4,1], [4,3,0,2,1,0]]:
run(*[x for x in d if x]) # *[1,2,3] makes python provide the elements as params
输出:
1 2 3 4
2 3 4 1
4 3 2 1
run( *[1,2,3])
是相同的run(1,2,3)
0
是 Falsy - 所以*[x for x in d if x]
ad=[0,1,2,3,0]
只使用in的非 falsy 值:x
d
*[1,2,3]
- 真值检验
- 如果您想避免创建列表,您可以将列表组合
run(*[x for x in d if x])
与生成器组合交换run(*(x for x in d if x))
(在这里并不重要;))
@Mehrdad Dowlatabadi 提出了一个有趣的附带问题 - 如果任何其他参数为 0,由于函数参数与列表理解中提供的参数不匹配,您会收到错误 - 您可以通过定义默认值来否定它:
def run(p1=0, p2=0, p3=0, p4=0):
print(p1,p2,p3,p4)
因此,如果您[0,1,2,0,0,0]
输入它,它仍然会运行。
推荐阅读
- google-apps-script - 编程以通过在工作表中选择某人的姓名将 Google 工作表添加到某人的云端硬盘
- java - 为什么 eclipse 在我的课堂上运行所有的 Junit 测试?
- node.js - Mongodb点符号不更新数组
- c - About appendStringInfo in C - I do not know how it works
- python - Cannot sort the elements of arrays within a larger array in ascending order using np.sort
- c - sqlite3_exec with and without explicit transaction
- javascript - 单击“更新按钮”后,Bootbox 确认框不起作用
- python - How to use GET with links/flask
- jquery - Why Ajax Function is not responding on button click event
- java - 连接 GATT 服务时应用程序不断崩溃