Python与条件和多个条件的组合

时间:2017-05-12 05:27:11

标签: python if-statement conditional-statements combinations

我有3个不同长度的列表

a = [945,625,800,146,12,84]

b = [0,1,4,249,84.3,87,98,128,872,973,674,1238,897]

c = [24,36,84,23]

我想通过以下标准创建 3个元素的组合

  1. 输出 元素在同一索引

    ex- a [0],b [0],c [0]或(945,0,24)无效

  2. 3位数组合应该有一位数字,一个两位数字 和一个三位数的数字

    因此,(945,0,23)有效,而(945,128,24)不正确。

  3. 如何为消除包含所有偶数或所有奇数的组合设置一些标准? 因此,(146,1,23)和(800,4,84)都不正确

  4. 如何组合楼层和天花板标准?例如 - 最大数量不能超过最小数量的100倍。

    因此(800,4,23)不正确,因为800超过最小数字的100倍,即4

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用product获取列表中的笛卡尔积,然后编写四个过滤函数来执行此操作:

a = [945, 625, 800, 146, 12, 84]
b = [0, 1, 4, 249, 84.3, 87, 98, 128, 872, 973, 674, 1238, 897]
c = [24, 36, 84, 23]

from itertools import product

c1 = lambda x: x not in zip(a, b, c)
c2 = lambda x: {len(str(i)) for i in x}=={1,2,3}
c3 = lambda x: not (all(i % 2 == 0 for i in x) or all(i % 2 != 0 for i in x))
c4 = lambda x: max(x) < 100 * min(x)

r1 = filter(c1,product(a,b,c))

r2 = filter(c2,r1)

r3 = filter(c3,r2)

r4 = filter(c4,r3)
print(r4)

所以预期的输出是:

(146, 4, 23)