使用逻辑比较从两个列表中逐个元素列出

时间:2017-04-27 18:27:34

标签: python list comparison logic

是否有一个函数将采用两个列表,逐个元素执行一些逻辑比较,然后根据这些比较创建一个列表?

示例:

>>> x = [4, 6, 2, 4]
>>> y = [8, 4, 1, 5]

>>> z = magicalfunction(x, y, logical_comparison='greatest element')
>>> print(z)
[8, 6, 2, 5]

4 个答案:

答案 0 :(得分:3)

mapmax

一起使用
>>> x = [4, 6, 2, 4]
>>> y = [8, 4, 1, 5]
>>> map(max, x, y)
[8, 6, 2, 5]

你应该在Python 3的输出上调用list

答案 1 :(得分:1)

这也应该有用

>>> x = [4, 6, 2, 4]
>>> y = [8, 4, 1, 5]
>>> [x[i] if x[i]> y[i] else y[i] for i in range(len(x))]
[8, 6, 2, 5]
>>> [xi if xi> yi else yi for i in zip(x, y)]
# or this way as suggested by u2berggeist

答案 2 :(得分:1)

实际上没有这样的功能,但是使用map(或列表推导),你至少可以模拟一些可能的"逻辑运算":

def magicalfunction(x, y, logical_comparison):
    if logical_comparison == 'greatest element':
        func = max
    elif logical_comparison == 'smallest element':
        func = min
    elif logical_comparison == 'shortest element':
        # Just as example of a custom function / logical comparison
        def func(xi, yi):
            if len(yi) > len(xi):
                return xi
            else:
                return yi
        # or "func = functools.partial(min, key=len)"
    else:
        raise ValueError('unknown operation')
    return list(map(func, x, y))

根据您的使用情况,您可能需要检查要支持的逻辑操作,并在那里添加更多elif

答案 3 :(得分:0)

使用numpy.where()有关详细信息,请参阅here;

import numpy as np
logical = np.where(np.array(x) > y, x, y)

使用where,您可以使用任何逻辑运算符,如下所示;

logical = np.where(np.array(x) | y, x, y)
logical = np.where(np.array(x) & y, x, y)
logical = np.where(np.array(x) >> y, x, y)