是否有一个函数将采用两个列表,逐个元素执行一些逻辑比较,然后根据这些比较创建一个列表?
示例:
>>> x = [4, 6, 2, 4]
>>> y = [8, 4, 1, 5]
>>> z = magicalfunction(x, y, logical_comparison='greatest element')
>>> print(z)
[8, 6, 2, 5]
答案 0 :(得分:3)
将map
与max
:
>>> 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)