有没有更短的方法呢?

时间:2019-02-24 15:17:21

标签: 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

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

3 个答案:

答案 0 :(得分:3)

您可以将所有数字放入列表中,然后将该列表的列表组合输入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是伪造的-因此*[x for x in d if x]的{​​{1}}只在d=[0,1,2,3,0]中使用x非伪造价值d

  • truth value testing
  • 如果您喜欢*[1,2,3]可以避免生成列表,那么可以将列表comp run(*[x for x in d if x])与生成器comp交换(这并不重要;))

@Mehrdad Dowlatabadi提出了一个有趣的附带问题-如果其他任何参数为0,则由于函数参数与列表推导中提供的参数之间的不匹配而导致错误-您可以通过定义默认值来否定这一点:

run(*(x for x in d if x))

因此,如果将def run(p1=0, p2=0, p3=0, p4=0): print(p1,p2,p3,p4) 放入其中,它仍将运行。

答案 1 :(得分:2)

如果要使用未设置为0的变量运行函数,则可以首先列出不为0的元素

elements = [element for element in a, b, c, d, e if element !=0]

然后使用元素列表作为参数调用函数

run(*elements)

作为一个班轮:

run(*[element for element in a, b, c, d, e if element !=0])

答案 2 :(得分:0)

进行跑步以获取列表:

Modelname.objects.filter(processing_time__gt=10)

然后使用过滤功能:

def run(lst):
    ...

run(filter(None, [a, b, c, d, e, f])) 删除所有fals-y元素。