Python 这条路有较短的路吗?

Python 这条路有较短的路吗?,python,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 因此,编码将非常长,是否有其他方法?您可以将所有数字放入一个列表,然后将该列表的列表comp馈送到run函数中-忽略0的元素: def run(p1

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

因此,编码将非常长,是否有其他方法?

您可以将所有数字放入一个列表,然后将该列表的列表comp馈送到
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表示d中的x,如果x]
    表示
    d=[0,1,2,3,0]
    只使用
    d
    中的
    x
    的非错误值:
    *[1,2,3]

  • 您可以将列表comp
    run(*[x代表x,如果x])
    与生成器comp进行交换,如果您愿意
    run(*(x代表x,如果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]
输入到函数中,它仍然会运行。

如果您想运行一个变量未设置为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])
让跑步记录一份清单:

def run(lst):
    ...
然后使用过滤器功能:

run(filter(None, [a, b, c, d, e, f]))

filter(None,lst)
删除所有fals-y元素。

运行b、d、e、f
的含义是什么?
run
是函数调用吗?你想运行一个数字不为零的函数吗?是的,是的way@mehrd否-不是-根据问题的定义,其他4个参数不是0。如果需要,可以使用
def run(p1=0、p2=0、p3=0、p4=0)
替换列表comp给出并过滤掉的任何0。