![](/img/trans.png)
[英]Compare two lists of float values element wise using min/max function in python
[英]Python: Compare two lists and get max and min values with signs
我有两个列表列表。 一个具有最大值,另一个具有最小值:
list_max = [
[100, 10, 100],
[-50, 90, -50]
]
list_min = [
[50, -90, -50],
[-100, -10, -500]
]
我想获得第三个列表,其中包含每个相关项目的最大绝对值及其符号,即:
list_max[0][0] = 100; list_min[0][0] = 50 -> list_3[0][0] = 100
list_max[0][1] = 10; list_min[0][1] = -90 -> list_3[0][1] = -90
list_3 = [
[100, -90, 100],
[-100, 90, -500]
]
也许和熊猫一起?
你不需要熊猫:
list_3 = [
[max((x, y), key=abs) for x, y in zip(line_max, line_min)]
for line_max, line_min in zip(list_max, list_min)
]
技巧是zip
, max
的是关键功能abs
。
如果绝对值相等(例如-50
对50
),则此解决方案将优先选择正值(因为abs
取第一个最大值)。 如果需要相反,则在调用max
交换x
和y
。
正如L3viathan所示,你不需要大熊猫。 但仅供参考,大熊猫你可以做到:
import pandas as pd
list_max = pd.DataFrame([
[100, 10, 100],
[-50, 90, -50]
])
list_min = pd.DataFrame([
[50, -90, -50],
[-100, -10, -500]
])
list_3 = list_max.where(abs(list_max) > abs(list_min), list_min)
list_max和list_min中的列表总是具有相同的长度吗? list_max和list_min的长度是否一致?
如果是这样,你可以遍历list_max(或list_min)与索引i
和遍历列表list_max内的索引j
,寻找最大绝对值为每个i
, j
。
list_3 = []
# Loop through lists in list_max
for i in range(len(list_max)):
temp_list = []
# Loop through items in each list in list_max
for j in range(len(list_max[i])):
list_max_val = list_max[i][j]
list_min_val = list_min[i][j]
final_val = list_max_val if abs(list_max_val) > abs(list_min_val) else list_min_val
# Add value to temporary list
temp_list.append(final_val)
# Add the temporary list to list_3
list_3.append(temp_list)
编辑:不得不修改这个,因为我错过了保持值的符号的指令
numpy
one-liner:
import numpy as np
In [1023]: list_max = np.array([
...: [100, 10, 100],
...: [-50, 90, -50]
...: ])
...: list_min = np.array([
...: [50, -90, -50],
...: [-100, -10, -500]
...: ])
...:
In [1024]: np.where(np.abs(list_max) > np.abs(list_min), list_max, list_min)
Out[1024]:
array([[ 100, -90, 100],
[-100, 90, -500]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.