首页 > 解决方案 > 这种方式有更短的方法吗?

问题描述

假设我有变量 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

所以编码会很长,还有其他方法吗?

标签: python

解决方案


您可以将所有数字放入一个列表中,然后将该列表的列表组合提供给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 值xd*[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]输入它,它仍然会运行。


推荐阅读